這一節(jié)不懂?
基本都是兩種方法:
第一:hello文件,去掉第二行,第三行static改為extern;
第二:hello文件,第三行static改為extern;test文件,第二行void前加上static。
具體原理我不懂,求大神指教。
基本都是兩種方法:
第一:hello文件,去掉第二行,第三行static改為extern;
第二:hello文件,第三行static改為extern;test文件,第二行void前加上static。
具體原理我不懂,求大神指教。
2019-11-13
舉報
2020-02-06
關(guān)于這道題的理解:
圖一圖二分別為兩個源文件
圖一中末尾處調(diào)用了say(),由于say()在第二個源文件中是外部函數(shù),因此say有兩個來源,其中之一為源文件1引用里的say,另一是源文件2里的say,因此報錯。
解決方式:
1.?干脆刪去引用,將say看作外部函數(shù)直接從源文件2中調(diào)用
2.?將源文件2的say改為內(nèi)部函數(shù),這樣源文件1末位1處的say()一定是調(diào)用的引用處的數(shù)據(jù)塊里的say,而不是源文件2里的say,因為內(nèi)部函數(shù)只能在所在的源文件中調(diào)用。
2019-11-27
第一步(hello.c)static——extern ,這個易懂,然后細(xì)心觀察一下hello.c中的第二行(#include"text".c【意思是包括(含)text.c文件,引用了一次文件了】) 再看一下第九行使用函數(shù)say();使用文件中函數(shù)會再次【調(diào)用text.c】) ,所以就變成了重復(fù)調(diào)用text.c這時系統(tǒng)就會報錯。所以我們應(yīng)該將text.c中的第2行(erxtern(默認(rèn))) void say()改成static void say()[這里的static是對函數(shù)的作用范圍的一個限定,限定該函數(shù)只能在其所處的源文件中使用]? ?這樣就只是#include"text".c調(diào)用另一個文件(include的作用就是把另一個文件的內(nèi)容全部復(fù)制過來),下面第九行使用函數(shù)say()就不能調(diào)用另一個文件了因為已經(jīng)改為局部的,但是已經(jīng)復(fù)制過來了,say()已成為hello.c的一部分,所以還是能調(diào)用say()
第二個方法就是把hello.c的第二行引用注釋(#include"text.c")去掉? 這樣下面使用say()函數(shù)的時候就只是引用一次另一個文件就不會重復(fù)了,然后把hello.c中的void printLine()前加上關(guān)鍵字【extern】,因為text.c中的say()前沒有關(guān)鍵字,所以系統(tǒng)默認(rèn)為extern。這樣外部函數(shù)就可以隨意被調(diào)用了。