hello.c調(diào)用test.c的問題,為什么說是兩個say()?
test.c調(diào)用了hello.c中的printLine(),這里好懂,因為printLine()聲明為extern,可以被其他源文件調(diào)用。
hello.c中引用test.c然后調(diào)用test.c中的say()函數(shù),為什么要把say()聲明為static?這里不太懂。
既然是#include "test.c",相當(dāng)于把test.c中的文件復(fù)制到了hello.c中,我直接調(diào)用say()應(yīng)該是可以的呀,不用聲明為static呀。
2020-02-29
我是這樣理解的:你在一個文件中調(diào)用另一個文件的函數(shù)有兩種方法,一是使用#include預(yù)處理命令直接把整個文件包含進(jìn)來;二是不適用#include預(yù)處理命令,直接把那個文件中要調(diào)用的函數(shù)設(shè)置為外部函數(shù)。
而這個題目的重復(fù)之處就在于他把兩種方法都滿足了,那么編譯器就不知道到底是用哪種方法來進(jìn)行函數(shù)調(diào)用,就產(chǎn)生了錯誤。
2020-02-10
正解:
疑惑:
想知道 hello.c和test.c的關(guān)系
2020-02-10
將hello.c里面的引用test.c去掉,
hello.c中printLine()函數(shù)前面不加extern (加不加都一樣),只加void;
test.c中say()函數(shù)前面只加void(同上);
運行,成功。?
問題在于 “引用”文件。
引用文件,可能會出現(xiàn)函數(shù)名重復(fù)的情況咯。
因此在引用的文件里面要給引用的函數(shù)加static。
我也是小白,希望有大佬真的解釋一下為啥。
定義的外部函數(shù),為什么可以在 hello.c test.c 隨意調(diào)用呢,換句話說,hello.c test.c兩者不用“引用”的語句時,二者有何聯(lián)系呀,為何能共享外部函數(shù)/