第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

hello.c調(diào)用test.c的問題,為什么說是兩個say()?

test.c調(diào)用了hello.c中的printLine(),這里好懂,因為printLine()聲明為extern,可以被其他源文件調(diào)用。

hello.c中引用test.c然后調(diào)用test.c中的say()函數(shù),為什么要把say()聲明為static?這里不太懂。

既然是#include "test.c",相當(dāng)于把test.c中的文件復(fù)制到了hello.c中,我直接調(diào)用say()應(yīng)該是可以的呀,不用聲明為static呀。

正在回答

3 回答

我是這樣理解的:你在一個文件中調(diào)用另一個文件的函數(shù)有兩種方法,一是使用#include預(yù)處理命令直接把整個文件包含進(jìn)來;二是不適用#include預(yù)處理命令,直接把那個文件中要調(diào)用的函數(shù)設(shè)置為外部函數(shù)。

而這個題目的重復(fù)之處就在于他把兩種方法都滿足了,那么編譯器就不知道到底是用哪種方法來進(jìn)行函數(shù)調(diào)用,就產(chǎn)生了錯誤。

0 回復(fù) 有任何疑惑可以回復(fù)我~

正解:

http://img1.sycdn.imooc.com//5e4120bb00013ff811760357.jpg

http://img1.sycdn.imooc.com//5e4120c60001437611550305.jpg


疑惑:

http://img1.sycdn.imooc.com//5e4121070001e8e311060363.jpg

http://img1.sycdn.imooc.com//5e4121100001df1211140307.jpg


想知道 hello.c和test.c的關(guān)系


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

T松子 提問者

以下是我的理解,我也不確定對不,你可以看一下討論一下: hello.c和test.c中的extern方法能互相調(diào)用(在不引用的前提下,否則會沖突), 應(yīng)該就像是把一個.c文件分成了兩個.c文件,但這兩.c文件還是遵循一個.c文件的規(guī)則,比如不能重復(fù)定義的函數(shù)。 然后c在此基礎(chǔ)上添加了一些規(guī)則,比如每個文件中的函數(shù),如果添加了static,就是這個文件特有。
2020-02-11 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕的地9191135

如果把這兩個程序拿去C++里面,能運行嗎,我也沒試過
2020-02-29 回復(fù) 有任何疑惑可以回復(fù)我~

將hello.c里面的引用test.c去掉,

hello.c中printLine()函數(shù)前面不加extern (加不加都一樣),只加void;

test.c中say()函數(shù)前面只加void(同上);

運行,成功。?

問題在于 “引用”文件。


引用文件,可能會出現(xiàn)函數(shù)名重復(fù)的情況咯。

因此在引用的文件里面要給引用的函數(shù)加static。

我也是小白,希望有大佬真的解釋一下為啥。

定義的外部函數(shù),為什么可以在 hello.c test.c 隨意調(diào)用呢,換句話說,hello.c test.c兩者不用“引用”的語句時,二者有何聯(lián)系呀,為何能共享外部函數(shù)/


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

T松子 提問者

似乎明白了,我查了引用#include,它就是把引用的內(nèi)容拷貝到這個位置, 相當(dāng)于hello.c中#include"test.c"被替換成了test.c中的內(nèi)容, 如果test.c中的say()不加static,那么在hello.c中就會又重新定義一個say()【因為引用復(fù)制過來的】,test.c和hello.c中的say()就沖突了, 所以如果引用,必須加static,加了static之后,hello.c調(diào)用的是自己文件中的say(),這樣就不沖突了。
2020-02-11 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_慕仰8138156 回復(fù) T松子 提問者

就是說 在say()前面加上static就是為了防止 main()里面調(diào)用say()時,會發(fā)生混亂,mian()里面的say()不是調(diào)用的test.c里面的,而是上面#include引用的,是吧。
2020-02-21 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

hello.c調(diào)用test.c的問題,為什么說是兩個say()?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號