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

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

這個題為什么要注釋掉第二行代碼

這道題是怎么運行的,int函數里沒有調用printLine,而且運行結果是怎么出來的,求大佬解釋。

正在回答

1 回答

因為 static的意思是內部函數(靜態),外部想調用他是不可以的??梢岳斫鉃橐环N自控的狀態,不受別人的控制。反之extren是外部函數(動態),可以隨意調動,可以被人操控和使用。現在我們是在hello.c中調用text.c的(int) printLine函數因為他被調用了,所以它(printLine)是被使用了。要把他定義為外部函數(extern),所以要改的第一次為:(hello.c)static——extern 第二細心觀察一下hello.c中的第二行(#include"text".c【包括(含)text.c文件】) 再看一下第九行(say();【調用text.c】) 細心觀察一下text.c的源代碼你會發現其實這倆行的目的都是一樣的在調用(hello.c調用text.c),所以就變成了重復調用text.c這時系統就會報錯。所以我們應該將text.c中的第2行(erxtern(默認)) void say()改成static void say()[這里的static是對函數的作用范圍的一個限定限定該函數只能在其所處的源文件中使用]? ?這樣就不會和前面的起沖突了。??

第二個方法就是把hello.c的第二行引用注釋(#include"text.c")去掉? 這樣只要把hello.c中的void printLine()前加上關鍵字【extern】,因為text.c中的say()前沒有關鍵字,所以系統默認為extern。這樣外部函數就可以隨意被調用了。

希望對你有幫助!


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

寶慕林5318477

大佬你好我想問下,為什么 “因為text.c中的say()前沒有關鍵字,所以系統默認為extern”呢?是調用了才會這樣默認的嗎?還是每個函數都是這樣默認的?
2019-04-13 回復 有任何疑惑可以回復我~
#2

qq_慕先生9035235 回復 寶慕林5318477

C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。
2019-04-14 回復 有任何疑惑可以回復我~
#3

慕圣1432959

text.c中say()變為靜態函數主函數還能調用他嗎?還是我理解錯誤,麻煩解釋一下。
2019-05-20 回復 有任何疑惑可以回復我~
#4

qq_恒牙_0

回復 慕圣1432959不能,主函數和text中say()不在一個源文件中
2019-07-06 回復 有任何疑惑可以回復我~
#5

qq_慕用5232731

因為第二行已經調用了test.c,如果test.c中的say()不改成static類型的話,那么hello.c中的第九行中的say()就會被系統認為再一次調用了test.c文件,從而報錯;如果改為static類型,那么hello.c中的第九行中的say()就只能從第二行已調用的test.c文件中調用,從而避免了二次調用。個人見解。。。
2020-01-29 回復 有任何疑惑可以回復我~
#6

慕田峪9069542 回復 慕圣1432959

我也這里不明白
2020-12-18 回復 有任何疑惑可以回復我~
查看3條回復

舉報

0/150
提交
取消

這個題為什么要注釋掉第二行代碼

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

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

幫助反饋 APP下載

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

公眾號

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