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