課程
/后端開發
/C
/C語言入門
求大神解釋。
2019-01-23
源自:C語言入門 5-13
正在回答
首先要明確,引用另一個文件test.c和調用say函數可以達到同一個目的。但是像原題又引用文件,同時又調用test內部的say函數(默認是外部函數),則會重新,出錯。因此正確做法可以是:1.只調用外部文件,同時將test函數內部的say函數改為static類型。2.直接將調用函數命令注釋掉即可,默認say是外部函數,直接調用。
禮X 提問者
請問是這個意思嗎?
注意到第二個源文件也就是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()是一個外部函數。
首先要明確,引用另一個文件test.c和調用say函數可以達到同一個目的。但是像原題又引用文件,同時又調用test內部的say函數(默認是外部函數),則會重復,出錯。因此正確做法可以是:1.只調用外部文件,同時將test文件內部的say函數改為static類型。2.直接將調用文件命令注釋掉即可,默認say是外部函數,直接調用。
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
2 回答為什么刪掉第一個自定義程序可以運行 而刪掉第二個卻不能呢?
3 回答為什么a要引號,而后面的c不用
2 回答為什么這些代碼在Xcode運行不起來, 而把== 換成=卻可以?
1 回答為什么第二行引用文件刪掉就可以運行成功了,那不是就變成了正常的函數調用了嗎?
2 回答第五行sum=0有什么用?刪除不是也可以運行
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2019-01-24
首先要明確,引用另一個文件test.c和調用say函數可以達到同一個目的。但是像原題又引用文件,同時又調用test內部的say函數(默認是外部函數),則會重新,出錯。因此正確做法可以是:1.只調用外部文件,同時將test函數內部的say函數改為static類型。2.直接將調用函數命令注釋掉即可,默認say是外部函數,直接調用。
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-01-24
首先要明確,引用另一個文件test.c和調用say函數可以達到同一個目的。但是像原題又引用文件,同時又調用test內部的say函數(默認是外部函數),則會重復,出錯。因此正確做法可以是:1.只調用外部文件,同時將test文件內部的say函數改為static類型。2.直接將調用文件命令注釋掉即可,默認say是外部函數,直接調用。