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

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

這一節不懂?

基本都是兩種方法:
第一:hello文件,去掉第二行,第三行static改為extern;
第二:hello文件,第三行static改為extern;test文件,第二行void前加上static。
具體原理我不懂,求大神指教。

正在回答

2 回答

關于這道題的理解:

圖一圖二分別為兩個源文件

圖一中末尾處調用了say(),由于say()在第二個源文件中是外部函數,因此say有兩個來源,其中之一為源文件1引用里的say,另一是源文件2里的say,因此報錯。

解決方式:

1.?干脆刪去引用,將say看作外部函數直接從源文件2中調用

2.?將源文件2的say改為內部函數,這樣源文件1末位1處的say()一定是調用的引用處的數據塊里的say,而不是源文件2里的say,因為內部函數只能在所在的源文件中調用。


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

第一步(hello.c)static——extern ,這個易懂,然后細心觀察一下hello.c中的第二行(#include"text".c【意思是包括(含)text.c文件,引用了一次文件了】) 再看一下第九行使用函數say();使用文件中函數會再次【調用text.c】) ,所以就變成了重復調用text.c這時系統就會報錯。所以我們應該將text.c中的第2行(erxtern(默認)) void say()改成static void say()[這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用]? ?這樣就只是#include"text".c調用另一個文件(include的作用就是把另一個文件的內容全部復制過來),下面第九行使用函數say()就不能調用另一個文件了因為已經改為局部的,但是已經復制過來了,say()已成為hello.c的一部分,所以還是能調用say()

第二個方法就是把hello.c的第二行引用注釋(#include"text.c")去掉? 這樣下面使用say()函數的時候就只是引用一次另一個文件就不會重復了,然后把hello.c中的void printLine()前加上關鍵字【extern】,因為text.c中的say()前沒有關鍵字,所以系統默認為extern。這樣外部函數就可以隨意被調用了。


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

銀河與星星

還是懵懵的……
2019-12-05 回復 有任何疑惑可以回復我~
#2

蘇洋哈哈 回復 銀河與星星

我想吃掉你,小甜餅
2019-12-24 回復 有任何疑惑可以回復我~
#3

抹茶松露冰激凌 回復 蘇洋哈哈

我想吃掉你
2020-01-16 回復 有任何疑惑可以回復我~
#4

慕粉2875371 回復 抹茶松露冰激凌

我想吃掉你,抹茶松露冰激凌
2020-01-16 回復 有任何疑惑可以回復我~
查看1條回復

舉報

0/150
提交
取消
C語言入門
  • 參與學習       926912    人
  • 解答問題       21533    個

C語言入門視頻教程,帶你進入編程世界的必修課-C語言

進入課程

這一節不懂?

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

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

幫助反饋 APP下載

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

公眾號

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