test.c调用了hello.c中的printLine(),这里好懂,因为printLine()声明为extern,可以被其他源文件调用。
hello.c中引用test.c然后调用test.c中的say()函数,为什么要把say()声明为static?这里不太懂。
既然是#include "test.c",相当于把test.c中的文件复制到了hello.c中,我直接调用say()应该是可以的呀,不用声明为static呀。
我是这样理解的:你在一个文件中调用另一个文件的函数有两种方法,一是使用#include预处理命令直接把整个文件包含进来;二是不适用#include预处理命令,直接把那个文件中要调用的函数设置为外部函数。
而这个题目的重复之处就在于他把两种方法都满足了,那么编译器就不知道到底是用哪种方法来进行函数调用,就产生了错误。
正解:
疑惑:
想知道 hello.c和test.c的关系
将hello.c里面的引用test.c去掉,
hello.c中printLine()函数前面不加extern (加不加都一样),只加void;
test.c中say()函数前面只加void(同上);
运行,成功。
问题在于 “引用”文件。
引用文件,可能会出现函数名重复的情况咯。
因此在引用的文件里面要给引用的函数加static。
我也是小白,希望有大佬真的解释一下为啥。
定义的外部函数,为什么可以在 hello.c test.c 随意调用呢,换句话说,hello.c test.c两者不用“引用”的语句时,二者有何联系呀,为何能共享外部函数/