重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
函數定義可以寫到其它(任意)函數的前或后。
創新互聯是一家專業提供海珠企業網站建設,專注與網站設計、成都網站設計、H5場景定制、小程序制作等業務。10年已為海珠眾多企業、政府機構等服務。創新互聯專業網站建設公司優惠進行中。
只是,在使用函數前,如果當前位置處于函數定義之后,則不需要聲明函數,可以直接使用。如果當前位置處于函數未定義階段(函數定義在其后面),則要先進行函數聲明,才可以使用函數。
聲明可以寫在函數體內,也可以在函數體外進行聲明!
C語言規定,返回值是int型的可以省略int關鍵字。如果子函數定義在調用函數后面,則在調用函數內部或其前面應對被調用函數加以聲明,但int類型的函數可以例外。函數聲明時不需要給出變量名,只要給出其類型就可以了(所以括號里的 int 和 int k 是一樣的)。其實8.15有錯誤,int add(void)后面少了分號,你照樣寫當然也錯了,要加分號的。
在C語言中,編譯一個C語言源文件是從第一行開始掃描到最后的,你調用一個函數,之前必須定義或申明過這個函數。
這樣是合法的:
void f(){
}
int main(){
f();
}
這樣也是合法的
void f();
int main(){
f();
}
void f(){
}
這樣就是非法的
int main(){
f();
}
void f(){
}
所以函數調用不一定需要先聲明,當函數定義調用函數之后需才要先申明。
如果函數定義在要調用該函數的函數的前面,就可以不用聲明了,比如定義在main()前面的函數,在main()函數里面就可以不用聲明,直接調用就可以,但是如果在后面的話,就要聲明了
先回答下第一個問題,子函數的實現方法可以放在使用它的主函數或者其它子函數后面,但是你的定義一定要在使用它之前;不然編譯器怎么知道你用的函數square是什么,這就是我們經常包含頭文件的一個目的,頭文件是一些函數定義或者預編譯命令。
修改是在#includestdio.h后面加
int square(int num);
第二個問題:num是在main定義是可以在main作用域內直接使用,或者當做參數傳遞給子函數,你的問題num為什么可以在子函數中用,首先你子函數的num并非main里的num只是你把他們名字寫成一樣了;main里num是通過值傳遞給子函數的num,實際他們兩個num的內存地址是不一樣的,你子函數換個名字去理解一下。
函數定義可以在調用之后,但是在調用前要加函數聲明
#include?iostream
using?namespace?std;
int?main()
{
int?b=2;
int?test(int?a);???//函數聲明(如果函數定義在調用后且沒有聲明,程序編譯不了)?
couttest(b);?????//函數調用
}
int?test(int?a)?????????//函數定義
{
return?a+2;?
}
函數要先聲明后才能調用,聲明分為兩種如下:
先聲明后定義:
void b();
void a()
{
b();
}
void b()
{
}
聲明和定義在一個地方:
void b()
{
}
void a()
{
b(); //這樣才能滿足先聲明后調用
}
你編譯錯誤的原因應該是這樣:
void a()
{
b(); //此時b還沒有聲明
}
void b()
{
};