两种方法解决,第一种,将hello.c中的#include "test.c";这一行删去,在函数printLine之前加上extern(事实上可省略)使其成为外部函数,使其能被test.c调用从而在test.c中完成函数say,函数say默认为外部函数,能被(删去#include "test.c"的)hello.c调用,从而完成。
第二种,在hello.c中只将函数printLine改为外部函数使其能在test.c中被调用,而在test.c中,将函数say改为test.c的内部函数,即在其之前加上static。由于hello.c中已经包含include"test.c"所以能直接调用该函数。
不知道我的这两个思路是否正确,但是对于第二种方法,有一个问题是,(若第一种方法思路正确,成立)既然函数say默认为外部函数,那么即使不包含test.c的文件(如把#include "test.c"删去的hello.c)都能直接调用函数say(第一种方法采用),为什么包含了test.c文件的默认的hello.c文件却不能直接调用,需要先把函数say改为test.c文件的内部函数才能调用呢?
明白了,多谢!
我来解释一下,为什么你的第二种方法一定要改为static内部函数,如果不加,你看到报错内容了吗,
因为多次定义了say()这个函数,为什么会多次定义呢?因为hello.c中已经引用了test.c这个文件,相当于把整个代码拿进去了,而hello.c和test.c在同一文件夹下,test.c的say又是外部函数,导致say()这个函数相当于外部函数同名了知道吗?那怎么解决呢,一改为静态函数,这样就可以同名了;二去掉引用test.c文件,这样就不存在多次定义了。