问题例子:
静态函数的定义与声明碰到一个很奇怪的问题,类似下面的代码,居然无法编译,test.h中包含一个static void test()的声明,test.c中有这个static void test()的实现,而后在main.c中调用。但是编译无法通过。
下面两种方式可以编译可以通过:
1、将test.c中static void test()的定义放到test.h中,这样可以编译通过
2、去掉test.c和test.h中的static,让test()成为非静态函数,这样也可以通过
但是我觉得无法理解的是,为什么下面这些代码就是编译不通过呢?
另外,请兄弟们解惑:static 函数究竟有什么好处,与非static函数有何不同??
test.h
------------------------------------------------
static void test();
------------------------------------------------
test.c
------------------------------------------------
#include "test.h "
#include <stdio.h>
#include <stdlib.h>
static void test()
{
printf( "test....
");
}
------------------------------------------------
main.c
-------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "test.h "
int main(int argc, char *argv[])
{
test();
system( "PAUSE ");
return 0;
}
解释:
静态函数的声明不应该放在头文件里,应该放在静态函数所在的文件里。
原因:以你的几个文件为例,把static void test();放在test.h里面,然后main.c使用这个头文件,由于在main.c文件里出现了static void test();这个声明,这迫使编译器在main.c文件里面寻找
static void test()的函数体,结果当然找不到。