當前位置:首頁 » 編程語言 » c語言函數聲明
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言函數聲明

發布時間: 2022-01-19 05:25:17

A. c語言關於函數聲明的概念

最好吧函數聲明放在頭文件的下面。不管用不用,值要用了調用函數就在頭文件下聲明下。不然你寫調用函數嵌套很容易出現函數聲明類型出錯等問題的。
如果需要將函數定義放在函數調用後,可以採用函數聲明。函數聲明的格式為:返回值類型符 函數名稱(形式參數列表);其中根據函數的不同,返回值類型可能是void(沒有返回值),形式參數也可能是void(沒有函數參數)。總之函數聲明和函數定義部分的函數頭格式基本相同,但函數聲明在末尾有一個分號。函數聲明裡的形式參數可以只寫類型而省略名稱。函數聲明可以位於主調函數的定義部分
函數聲明也可以在函數外部,這樣聲明的特點是:當前文件從聲明位置到文件結束的任何函數中都可以調用該函數。
函數定義和函數聲明是完全不同的。函數定義包括函數頭和函數體,完整的定義了函數的輸入、輸出和具體實現;函數定義一定包括一對大括弧。而函數聲明是為了編譯的需要。總之只要理解了編譯的特點,就比較容易理解聲明的必要性和聲明的有效范圍。

B. C語言函數聲明

我也來 說幾句。。

標准編譯器 對函數的調用 都要
先申明 才能 調用
(生產的時候就這樣設定的)。。我推薦試用
大點的 vs2005,vc2000.
小點的 Dev-cpp ,Turboc 3.0 (2.0 不支持滑鼠有點 麻煩)

這里 就涉及: 申明和定義之間的區別。

申明-- 不開辟內存,僅僅告訴編譯器,申明的部分存在,要預留一點空間。
定義-- 開辟內存。
申明 屬於 預編譯范疇的。最好寫在頭文件中(樓主,自定義頭文件學了沒有啊?)(申明都寫在頭文件中,只是一種好的編程習慣)

因為 在編譯的時候,編譯器先處理一些特殊數據(宏定義,函數的申明,變數的申明),在這個過程中,編譯器 通過申明 可以預測整個定義需要的內存大小,並且 把這些大小預留起來,留給定義的時候使用(因為雖然定義,但是在 main函數裡面沒有調用,一樣的不分配內存)。

如果不事先申明,直接定義,有可能會造成系統崩潰,出現內存不足,不能分配。 然而現在內存都是1G左右了,所以一般空間都足夠,所以你也可以不申明直接定義函數。
但是一旦內存緊張,就會出錯,而且程序簡潔性就很低。(不看到定義,還不知道原來還定義了這么一個函數!!!)

還有 變數也一樣,標準的都是 先申明在定義。
extern int i; //申明
int i=0; //定義並初始化為0
int i; //定義
.。。。。。。。。。。。。。。。。。

所以 從現在其要養成良好的編程習慣

先申明,在定義。
申明最好都放在 一塊,並且都在頭文件中(為了便於管理)。

C. c語言函數聲明

假設主函數main()。其他函數void fun(int a,int *b)。

關於函數定義和聲明:

在代碼中fun函數,有完整函數體的代碼就是函數定義部分,比如void fun(int a,int *b){。。。};。

如果沒有具體實現的函數體代碼(也就是大括弧內容),那麼就是函數聲明。比如void fun(int ,int *);

關於函數聲明和調用:

如果fun函數定義在main代碼上面。比如:

void fun(int a,int *b){。。。};

int main(){

int a=0,int b=0;

......

fun(a,&b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句

return 0;

}

關於函數局部變數及全局變數:

簡單區分:

定義在函數之外的就是全局變數,這個變數所有函數都可以直接使用,並且共用同一個地址。任意函數修改了變數值,其他函數調用也會變。

定義在函數之內的就是局部變數,局部變數只屬於該函數,其他函數即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。

比如:

int a;//這就是全局變數,作用域下所有函數共用

int main()

{

int b;//這就是局部變數,只在本函數有效,如果想在調用fun函數時讓fun也使用該變數,需要把這個變數的地址作為參數傳遞過去。

printf("%d",b);

return 0;

}

注意:c語言中允許局部變數和全局變數同名,但是同名的局部變數會屏蔽全局變數,實際代碼避免同名。

關於函數傳值和傳址:

如函數void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址

所以在調用該函數時,比如:

int main()

{

int c,d;

fun(c,&d);//這里調用就對應上面形參類型,第一個參數傳遞了c的值(傳值),第二個參數傳遞了d的地址(傳址),這里c和&d,叫做實參。當fun函數運行時改變了a和b指向地址的值,對應main函數中c的值不變,d的值改變。

return 0;

}

順帶一說:局部變數,在函數運行結束後會自動釋放,所以想把局部變數地址作為返回值,需要用malloc函數申請。(這里看不懂可以暫時忽視)

D. C語言中的函數聲明是什麼

函數聲明是讓代碼調用點知道按照什麼格式來調用函數。
(函數參數列表是什麼,返回值是什麼。)

否則調用點無法確知調用函數的格式。
(註:在C里也可以無函數聲明就調用,那樣會在程序鏈接的時候做調用匹配檢查。但這非常非常不推薦這樣做。
C++則完全屏蔽這種可能,如果出現未聲明的調用,則直接編譯報錯。)

E. C語言中函數聲明問題

第一,如果你沒有看錯就是你的書錯了,只有int和char類型的函數不必聲明
第二,C中可以不聲明函數的條件是3個
1就是上面我說的
2.是被調函數定義在主調函數之前,可不必聲明
3函數的外部已聲明過了,個個主調函數中不必聲明

對於第二點,很好解釋,因為聲明的目的在於告訴編譯器有這么個自定義函數,返回類型是什麼,如果被調函數定義在主調函數之前,那麼編譯器自然就知道了這個函數
你把f2和f1換下位置並去掉聲明就明白了

再說一句,寫函數聲明是編寫程序的良好習慣

請注意這是C程序,C官方聲明標准編譯器是Turboc 2。0
不要把C++的概念強加給C
我不是說VC++6不好,而是說既然是在學C,就要用標準的C編譯器,只有標准C編譯器才能正確的學習C的基礎理論

F. 如何在C語言中定義一個函數

需要准備的材料分別有:電腦、C語言編譯器。

1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。

G. c語言函數的調用和聲明

假設主函數main()。其他函數void fun(int a,int *b)。

關於函數定義和聲明:

在代碼中fun函數,有完整函數體的代碼就是函數定義部分,比如void fun(int a,int *b){。。。};。

如果沒有具體實現的函數體代碼(也就是大括弧內容),那麼就是函數聲明。比如void fun(int ,int *);

關於函數聲明和調用:

如果fun函數定義在main代碼上面。比如:

void fun(int a,int *b){。。。};

int main(){

int a=0,int b=0;

......

fun(a,&b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句

return 0;

}

關於函數局部變數及全局變數:

簡單區分:

定義在函數之外的就是全局變數,這個變數所有函數都可以直接使用,並且共用同一個地址。任意函數修改了變數值,其他函數調用也會變。

定義在函數之內的就是局部變數,局部變數只屬於該函數,其他函數即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。

比如:

int a;//這就是全局變數,作用域下所有函數共用

int main()

{

int b;//這就是局部變數,只在本函數有效,如果想在調用fun函數時讓fun也使用該變數,需要把這個變數的地址作為參數傳遞過去。

printf("%d",b);

return 0;

}

注意:c語言中允許局部變數和全局變數同名,但是同名的局部變數會屏蔽全局變數,實際代碼避免同名。

關於函數傳值和傳址:

如函數void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址

所以在調用該函數時,比如:

int main()

{

int c,d;

fun(c,&d);//這里調用就對應上面形參類型,第一個參數傳遞了c的值(傳值),第二個參數傳遞了d的地址(傳址),這里c和&d,叫做實參。當fun函數運行時改變了a和b指向地址的值,對應main函數中c的值不變,d的值改變。

return 0;

}

順帶一說:局部變數,在函數運行結束後會自動釋放,所以想把局部變數地址作為返回值,需要用malloc函數申請。(這里看不懂可以暫時忽視)

H. 關於c語言的函數聲明

函數聲明它為編譯器提供了有用的信息,編譯器在翻譯代碼的過程中,只有見到函數原型(這里即可以是聲明也可以是定義)之後才知道這個函數的名字、參數類型和返回值,這樣碰到函數調用時才知道怎麼生成相應的指令,所以函數原型必須出現在函數調用之前,這也是遵循「先聲明後使用」的原則。

注意上面說的函數原型是包括函數聲明和定義兩種形式的。

另外還有一種特殊情況,就是
隱式聲明:
隱式聲明的函數返回值類型都是int;
如下
#include<stdio.h>
main()
{

printf("%d\n",jiec(5));
}
int jiec(int n)
{
int y=1;int i;
for(i=1;i<=n;i++)
y=y*i;
return(y);
}
這個程序也是可以運行的。主要返回值為int.

I. C語言中函數什麼時候聲明什麼時候定義最好舉例說明。

函數可以在調用函數的函數(比如main函數)之前定義,這樣就無需聲明了;

舉例:

intadd(intx,inty){returnx+y;}//在編譯程序編譯到main的調用add之處時,由於已經編譯過add的函數了,因此編譯程序已經知曉調用規則,因此可以省略聲明語句
voidmain(){intx=5,y=6,c;c=add(x,y);printf("%d ",c);}

如果函數在調用函數的函數之後定義,為了通知編譯程序要調用函數的格式,需要在調用函數的函數前添加函數的聲明。

舉例:

intadd(intx,inty);//函數聲明也可以簡單地寫成intadd(int,int);通知編譯程序main中調用add的規則即可
voidmain(){intx=5,y=6,c;c=add(x,y);printf("%d ",c);}
intadd(intx,inty){returnx+y;}