重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
在C語言中,所有的函數定義,包括主函數main在內,都是平行的。也就是說,在一個函數的函數體內, 不能再定義另一個函數, 即不能嵌套定義.
成都創新互聯專業提供成都主機托管四川主機托管成都服務器托管四川服務器托管,支持按月付款!我們的承諾:貴族品質、平民價格,機房位于中國電信/網通/移動機房,綿陽服務器托管服務有保障!
在例子中,沒有嵌套定義的.
int max(int a,int b)
{
if(ab)return a;
else return b;
}//這是在定義max
而main()函數中,
void main()
{
int max(int a,int b);//這是聲明,被調用函數,定義在main函數前,可以省略.
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",x,y);
z=max(x,y);//這是調用.
printf("maxmum=%d",z);
}
所以不矛盾..
首先這不是函數的嵌套,而是函數的調用。 int
main(){}是主(調)函數,int
max1(){}是被調函數(也稱為用戶函數)。
你編的程序最大的問題就是主函數中的
實參
e和f沒有值(或者沒有被賦值),也就達不到調用函數的效果。
因為函數long sum (int n,int k)已經在前面聲明了,所以可以編譯運行。較新的編譯器是支持這么寫程序的,但是不推薦。
#include stdio.h
void b()
{
printf("Hello World!\n");
}
void a()
{
b();
}
void main ()
{
a();
}
這樣就OK了,只要遵循一個原則,函數在被調用前必須是已經聲明過的。因為編譯器是要先知道有這個東西存在(已經被定義或聲明過),才能通過編譯。
如果函數b在函數a之前定義(如上),則不需要在函數a里定義,直接調用即可;
如果函數b在函數a之后定義(如下),則應在在a中聲明函數b之后才能調用。
void a()
{
void b();
b();
}
void b()
{
printf("Hello World!\n");
}