我知道有兩種解決辦法(不知道是否真的正確),但是有一個問題不解。
兩種方法解決,第一種,將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文件的內部函數才能調用呢?
2018-07-20
明白了,多謝!
2018-07-04
我來解釋一下,為什么你的第二種方法一定要改為static內部函數,如果不加,你看到報錯內容了嗎,
因為多次定義了say()這個函數,為什么會多次定義呢?因為hello.c中已經引用了test.c這個文件,相當于把整個代碼拿進去了,而hello.c和test.c在同一文件夾下,test.c的say又是外部函數,導致say()這個函數相當于外部函數同名了知道嗎?那怎么解決呢,一改為靜態(tài)函數,這樣就可以同名了;二去掉引用test.c文件,這樣就不存在多次定義了。