关于static函数声明的问题
假如我在test.h中声明了一个函数
test.h
static void fn001( void );
然后在test001.c和test002.c中都包含了test.h
并且都对 fn001做了定义
test001.c
static void fn001( void )
{
printf("this is a test fn \n");
return;
}
test002.c
static void fn001( void )
{
printf("this is a test fn in another file\n");
return;
}
但是编译器也没报错,那是不是说test.h中的static void fn001( void );是这两个test.c中的fn001的函数声明?
[解决办法]
static函数一个源文件一份,#include是宏包含,把你的static函数定义粘贴到一个源文件里去。
[解决办法]
用#include"test.h"相当test.h的内容复制到当前文件中
[解决办法]
test.h
static void fn001( void );
完全多余的。
[解决办法]
打开预编译文件生成开关,查看生成后的中间文件。就知道你的这个函数到底是什么了
[解决办法]
好像不是这样吧,static 修饰的函数是不能跨文件调用的。求楼下解释
[解决办法]
#include的头文件是在预编译阶段处理,其实这个阶段还不是编译。在这个阶段处理的内容就是包含头文件、删除注释、宏替换等等。
[解决办法]
6楼说的对。编译器不报错是因为static的关系。static的函数都是内部链接的,test001.c和test002.c分别只能看到他自己版本的static函数,所以就算有两个版本,链接的时候也不会出错。
如果你把static去掉,我相信你的编译器就要报错了。