亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

發現吧test.c中函數改為static就行了,為什么被引用的必須是static類型?

被引用的需被限定?

正在回答

3 回答

注意到第二個源文件也就是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()是一個外部函數。


0 回復 有任何疑惑可以回復我~

這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的

1 回復 有任何疑惑可以回復我~

靜態的? ?static



2 回復 有任何疑惑可以回復我~
#1

慕神6282746

因為hello.c中已經包含了test.c文件,可以直接用里面的函數,如果不加static的話,正如導師說的,say()函數就被默認為是extern類型的,那么既包含了test.c文件,又調用了say()函數,就等于重復調用了,所以會報錯。你嘗試一下,吧hello.c中的#include“test.c”去掉,在test.c中函數改為extern類型的,你會發現能夠正常輸出
2019-01-18 回復 有任何疑惑可以回復我~
#2

慕娘0415944 回復 慕神6282746

6666
2019-01-22 回復 有任何疑惑可以回復我~
#3

qq_慕斯2176059 回復 慕神6282746

原來如此!
2019-01-24 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

發現吧test.c中函數改為static就行了,為什么被引用的必須是static類型?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號