引用文件和外部函數
hello.c中引用了test.c,test.c中包含默認的外部函數say(),即使修改了printLine()方法,還是會出錯,將test.c中的say()方法改成靜態(tài)的,則運行成功。貌似是既引用文件,又調用外部函數就會報錯,但是一個文件中如果既有內部也有外部函數,且都需要調用的情況咋辦?
hello.c中引用了test.c,test.c中包含默認的外部函數say(),即使修改了printLine()方法,還是會出錯,將test.c中的say()方法改成靜態(tài)的,則運行成功。貌似是既引用文件,又調用外部函數就會報錯,但是一個文件中如果既有內部也有外部函數,且都需要調用的情況咋辦?
2019-01-30
舉報
2019-01-30
static靜態(tài)函數,(內部函數),在本原程序文件中使用。extern外部函數,可以被 其他文件所調用。。
2019-03-05
我覺得2文件加不加static都可以
1文件的函數printLine前面要加extern,因為該函數要被2文件調用。這個程序就是1調用2,2調用1
2019-02-22
樓主,我按你說的,2文件改為static后運行成功了,但是我在Dev c++上實驗,2文件改為extern也可以,現在有點暈,就是先不管2文件中SAY函數是被調用又引用,先問你:2文件內被調用函數前面,是要寫extern嗎,還是1文件調用外部函數時printLine前面要加extern,你懂我意思嗎,謝謝。
2019-02-21
注意到第二個源文件也就是test.c【后面將用T代替】調用了第一個源文件hello.c【后面將用H代替】中的函數,因此我們先將H中被T調用的函數printLine()修改為外部函數也就是加上一個extern,這樣T也就是一個正常的源文件了。? ?現在討論兩種情況:
A。當我們把T編譯為靜態(tài)函數的時候——static say()? ?,我們在H若要使用T的這個靜態(tài)函數,這需要將他調用過來,而一個靜態(tài)函數是無法直接調用的,此時我們需要先引入say()函數所在的源文件,也就是H中的第二行代碼的用意。? ? ?
B。當我們把T編譯為動態(tài)函數的時候——say()或者extern say()【因為extern可以省略】,我們若要在H中使用T的這個函數say()那么我們可以直接調用,因為say()是一個外部函數,無需引入其所在的源文件T也就是不需要H的第二行,因此會有人說“只要把第二行注釋掉就行了”其實這句話的前提是say()是一個外部函數。