哪里錯了錯了
#include?<stdio.h> #include?"test.c"???//引用test.c文件 extern?void?printLine()?????//這里定義的方法對嗎? { ???printf("**************\n");??? } int?main() { ????say(); ????return?0; }
#include?<stdio.h> #include?"test.c"???//引用test.c文件 extern?void?printLine()?????//這里定義的方法對嗎? { ???printf("**************\n");??? } int?main() { ????say(); ????return?0; }
2019-02-17
舉報
2019-02-21
注意到第二個源文件也就是test.c【后面將用T代替】調用了第一個源文件hello.c【后面將用H代替】中的函數,因此我們先將H中被T調用的函數printLine()修改為外部函數也就是加上一個extern,這樣T也就是一個正常的源文件了。? ?現在討論兩種情況:
A。當我們把T編譯為靜態函數的時候——static say()? ?,我們在H若要使用T的這個靜態函數,這需要將他調用過來,而一個靜態函數是無法直接調用的,此時我們需要先引入say()函數所在的源文件,也就是H中的第二行代碼的用意。? ? ?
B。當我們把T編譯為動態函數的時候——say()或者extern say()【因為extern可以省略】,我們若要在H中使用T的這個函數say()那么我們可以直接調用,因為say()是一個外部函數,無需引入其所在的源文件T也就是不需要H的第二行,因此會有人說“只要把第二行注釋掉就行了”其實這句話的前提是say()是一個外部函數。
2019-02-18
#include "test.c"和say();意義是一樣的,注釋掉#include "test.c"就可以了。