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

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

到底是hello.c調用test.c的,還是test.c調用hello.c的函數

hello.c

#include <stdio.h>

#include "test.c" ? //引用test.c文件

extern void printLine() ? ? //這里定義的方法對嗎?

{

? ?printf("**************\n"); ??

}

int main()

{

? ? say();

? ? return 0;

}

test.c

#include <stdio.h>

void say(){

? ? printLine();

? ? printf("I love imooc\n");

? ? printf("good good study!\n");

? ? printf("day day up!\n");

? ? printLine();

}?


正在回答

2 回答

是hello.c中的main函數調用say函數,這個say函數是定義在test.c中的。本質上是函數間調用,與文件無關。程序永遠是從main函數開始運行的。

你這代碼中有很多錯誤和不合理之處:

不應該直接在代碼中include另一個函數定義文件,這樣做會將test.c中的內容都包含到hello.c中,所以實際上最后main和say函數都是定義在hello.c中的。

而且在test.c中,say函數調用了printLine函數,但在之前卻并沒有聲明printLine(聲明在hello.c中)。

聲明函數時不用寫extern,函數默認就是external的(準確地說是previous linkage)。


正確的做法是:

一般來說將函數的定義寫在某個.c文件中,將其聲明寫在.h中。函數在使用前需要函數聲明,所以將函數聲明(非定義)寫到一個.h文件中,稱為頭文件。在其他需要調用這個函數的文件中只需include這個頭文件就可以得到函數聲明了。如果像你代碼中那樣直接include進.c文件,就會把函數定義也包含進來,這樣可能造成程序中有多處該函數的定義,這是不合法的,編譯器會報重復定義錯誤。

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

qq_Guardianship_0 提問者

非常感謝!
2015-07-18 回復 有任何疑惑可以回復我~
#2

慕后端3326841

這個解釋的好明白,贊?。?!
2016-11-24 回復 有任何疑惑可以回復我~
#3

onemoo 回復 慕后端3326841

如果你看了這里的課程,但它并沒有講明白這些,那么——這就側面證明這個“C語言入門”課程非常糟糕...
2016-11-25 回復 有任何疑惑可以回復我~

這個是hello.c調用test.c啊

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

qq_Guardianship_0 提問者

extern不是外部變量嗎,它和動態變量有什么區別啊
2015-07-18 回復 有任何疑惑可以回復我~
#2

喬幫主 回復 qq_Guardianship_0 提問者

http://blog.csdn.net/zhangzheng0413/article/details/7569226你看下這里面吧
2015-07-18 回復 有任何疑惑可以回復我~
#3

onemoo 回復 qq_Guardianship_0 提問者

這個extern修飾的也不是變量啊,它是修飾函數的。再者,函數前無需寫上extern,默認就是extern的。
2015-07-18 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

到底是hello.c調用test.c的,還是test.c調用hello.c的函數

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

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

幫助反饋 APP下載

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

公眾號

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