c語言函式宣告的問題,C語言函式宣告的問題

2022-02-14 12:21:48 字數 6039 閱讀 6240

1樓:

我也來 說幾句。。

標準編譯器 對函式的呼叫 都要

先申明 才能 呼叫

(生產的時候就這樣設定的)。。我推薦試用

大點的 vs2005,vc2000.

小點的 dev-cpp ,turboc 3.0 (2.0 不支援滑鼠有點 麻煩)

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

申明-- 不開闢記憶體,僅僅告訴編譯器,申明的部分存在,要預留一點空間。

定義-- 開闢記憶體。

申明 屬於 預編譯範疇的。最好寫在標頭檔案中(樓主,自定義標頭檔案學了沒有啊?)(申明都寫在標頭檔案中,只是一種好的程式設計習慣)

因為 在編譯的時候,編譯器先處理一些特殊資料(巨集定義,函式的申明,變數的申明),在這個過程中,編譯器 通過申明 可以**整個定義需要的記憶體大小,並且 把這些大小預留起來,留給定義的時候使用(因為雖然定義,但是在 main函式裡面沒有呼叫,一樣的不分配記憶體)。

如果不事先申明,直接定義,有可能會造成系統崩潰,出現記憶體不足,不能分配。 然而現在記憶體都是1g左右了,所以一般空間都足夠,所以你也可以不申明直接定義函式。

但是一旦記憶體緊張,就會出錯,而且程式簡潔性就很低。(不看到定義,還不知道原來還定義了這麼一個函式!!!)

還有 變數也一樣,標準的都是 先申明在定義。

extern int i; //申明

int i=0; //定義並初始化為0

int i; //定義

.。。。。。。。。。。。。。。。。。

所以 從現在其要養成良好的程式設計習慣

先申明,在定義。

申明最好都放在 一塊,並且都在標頭檔案中(為了便於管理)。

2樓:個性的鼓手

第一,如果你沒有看錯就是你的書錯了,只有int和char型別的函式不必宣告

第二,c中可以不宣告函式的條件是3個

1就是上面我說的

2.是被調函式定義在主調函式之前,可不必宣告3函式的外部已宣告過了,個個主調函式中不必宣告對於第二點,很好解釋,因為宣告的目的在於告訴編譯器有這麼個自定義函式,返回型別是什麼,如果被調函式定義在主調函式之前,那麼編譯器自然就知道了這個函式

你把f2和f1換下位置並去掉宣告就明白了

再說一句,寫函式宣告是編寫程式的良好習慣

請注意這是c程式,c官方宣告標準編譯器是turboc 2。0不要把c++的概念強加給c

我不是說vc++6不好,而是說既然是在學c,就要用標準的c編譯器,只有標準c編譯器才能正確的學習c的基礎理論

3樓:微生成業錢芬

c/c++規定,要呼叫的函式需要在被呼叫前先申明。

左邊的fact申明為全域性的,也就是在申明瞭以後下邊的**任意位置都可以呼叫。

右邊的fact申明為區域性,它只能在main函式的作用域內使用,如在main與fact函式間還有其它函式要呼叫fact,那就會提示fact沒有申明

4樓:

可以直接定義 但是必須在呼叫的前面定義 但是宣告很明顯說明這裡有一個函式 下面可能需要呼叫

5樓:匿名使用者

c語言規定,所有的函式被呼叫之前都必須宣告.宣告格式為 -- 儲存型別 資料型別 函式名(引數)

定義一個變數是可以直接定義使用的,但也必須在使用之前定義啊.

所以,還有另外一種形式可以不用宣告函式,那就是把函式的定義部分放在主函式的上面.

這是這是因為c程式都是從main()函式開始執行的,而且是從上往下執行.

比如#include

float add(float x,float y) /*定義add函式*/

void main()

c語言中函式宣告問題

6樓:

第一,如果你沒有看錯就是你的書錯了,只有int和char型別的函式不必宣告

第二,c中可以不宣告函式的條件是3個

1就是上面我說的

2.是被調函式定義在主調函式之前,可不必宣告3函式的外部已宣告過了,個個主調函式中不必宣告對於第二點,很好解釋,因為宣告的目的在於告訴編譯器有這麼個自定義函式,返回型別是什麼,如果被調函式定義在主調函式之前,那麼編譯器自然就知道了這個函式

你把f2和f1換下位置並去掉宣告就明白了

再說一句,寫函式宣告是編寫程式的良好習慣

請注意這是c程式,c官方宣告標準編譯器是turboc 2。0不要把c++的概念強加給c

我不是說vc++6不好,而是說既然是在學c,就要用標準的c編譯器,只有標準c編譯器才能正確的學習c的基礎理論

7樓:程憐少三姍

可能和編譯器有關,我用vc++6.0這段**沒有問題.可以直接編譯執行.

8樓:撒荌言曉曼

這種編碼風格是確實存在的,是在正式標準c89出現前,甚至是k&rc(這裡特指第二版的,第一版的沒看過)正式出現前就有的風格,現在基本是不用這樣的風格了

不過gcc到底是gcc,這種"洪荒時代"的**風格都可以查了一下,the

cprogramming

language

第二版裡有提到過,中文版

第二版.新版p19

9樓:

這同你的編譯器有關。

我用 ms vc++ 編譯器, 用 cl 命令編譯連結, 把你的**去掉long f2(int), 編譯後執行正確無誤。

你可以把

f1(int p)

和f2(int q)

次序對調一下,這時省去原型宣告long f2(int),也許就可以了。

因為f1要用到f2,先宣告f2,後宣告f1. 你的編譯器較笨。書上是對的。

10樓:同進退

用visual c++6.0很好的!

c語言 函式定義概念問題

11樓:及時澍雨

先舉個例子:

#include

int max(int,int); //這是函式max的申明,最後要加分號

int main()

int max(int n,int m) //這是函式max的定義部分,最後不加分號

不能在函式體內定義函式是什麼意思?

【就是說函式在程式中不能巢狀定義,這個和pascal語言不同,例如上面程式中,max函式不能定義在main函式中間】

定義是宣告還是使用?

【定義既不是申明,也不是使用,函式具體功能的實現**叫做函式的定義,如上面程式最後7行就是定義】

函式不是應該先宣告在使用嗎?

【是的,但如果函式定義在函式使用之前,就可以不用申明(如下面程式)。函式定義在函式使用後的情況下(如上面程式),先宣告,能使編譯器在編譯在編譯過程中能夠識別使用的函式】

#include

int max(int n,int m) //這是函式max的定義部分,最後不加分號

int main()

定義如何解釋?

【見第二個問題】

12樓:

1、定義,宣告,使用:

定義就是給出函式的實體,就是用**寫出函式功能包括函式名函式引數和函式體;

如:int max(int a,int b)

宣告,就是說明,說明一下這個函式的樣子,即給出函式名和函式引數,宣告是給編譯器看 的,以便於編譯器檢查函式呼叫是否正確。如:int max(int a,int b);也可以int max(int,int)

使用就是呼叫,是在**中實實在在的發揮該函式的功能,如:m=max(2,3);

2在函式內部不能定義其他函式就是說,在定義一個函式的時候,不能在函式內在定義另一個函式,即函式的的定義不能巢狀。

13樓:

不能在函式體內定義函式是什麼意思?

函式的操作方法與內容,不在寫在另一個函式體內,因為那樣做,會使它的作用域在一個函式體內,在別的地方沒有辦法引用,編譯器找不到。理由可能不對,但是這樣規定的。

定義是宣告還是使用?

定義是指明操作內容,即不是宣告也不是使用,而是指它的工作內容,使用是指呼叫,宣告是編譯器知道這麼個破東西。

函式不是應該先宣告在使用嗎?

對。定義如何解釋?

上面已經說過了。

14樓:歐文君愛分享

如果你的主函式在前面,其他函式在後面。因為程式是從上到下讀的,所以你在主函式裡想呼叫其他函式就必須要先宣告。但如果你的呼叫函式寫在前面,那麼在主函式中就不用先宣告瞭,就可以直接呼叫

15樓:星當月

是先定義後使用,定義就是說先確定型別,是常量還是變數等,定下來後再使用

16樓:酈鵾拓跋湛英

可以,宣告函式時可以不需要形參名稱,只要形參型別。

注意這叫函式宣告,不叫定義。在大括號中給出函式具體實現的才叫函式定義。定義函式時形參名不能省略。

c語言函式宣告的位置的問題

17樓:匿名使用者

如果被引用函式在其他檔案中定義的,就在主函式外宣告;如果是在該檔案中定義的,就應當在主函式中宣告。 你的幾個函式都是在一個檔案中定義的,所以應當在main 中宣告

希望對你有用!!

18樓:傳說哥也寂寞

下面的程式對add函式的定義並沒有放在主函式裡面,而是在主函式結束以後才定義的。你可以仔細看一下下面的程式。

19樓:匿名使用者

你如果把disp函式的聲名放在主函式的裡面時,前面加一個int或別的型別再編譯就對啦

20樓:匿名使用者

加個int也不對,c中如果函式你不寫返回值型別,他預設的就是整型。

我記得是這樣的,1.把子函式放主函式main函式外並且是之前定義,無需宣告。2.

如果你把子函式放到main函式外,則必須在定義的時候先宣告。3.如果把 子函式放在main函式中就不需要提前宣告瞭。

21樓:勝利者的口吻

迄今為止,c語言的聖經是anci c,之前的c編譯器有缺陷,之後的c++把好多人都搞瘋了,無論你採用什麼編譯器,關於函式的宣告,請聽聽c語言教父的忠告:『最好使用新式的函式原型宣告方式』。

22樓:冰至誠

你上面那個沒有定義函式型別

c語言關於函式宣告的問題,為什麼宣告後還是報錯說函式未定義

23樓:匿名使用者

你把大括號的位置放錯了,sushu函式被定義在了main函式裡面,但是按照c語言的規定,函式不允許巢狀定義,所以你的sushu相當於沒有定義(不知為何你的編譯器沒有報錯說不允許在函式內定義函式)。解決方法是把你最後面多出來的大括號移到main函式最後面。

24樓:匿名使用者

把函式定義在main的外面 在前面宣告。

c語言 函式定義 函式宣告 區別

25樓:

函式宣告指函式原型宣告,只有函式名,函式型別,引數個數和型別,無函式體。一般放在主函式前。逗號結尾。

函式定義,除上述外,去掉結尾逗號,加函式體。可放在main函式後面,也可放在main函式前面。放在main函式前面則不要寫函式原型宣告。

26樓:誰來解我的問題

給你舉個例子:

void fun_a(void); //函式的宣告....

....

void fun_a(void)//函式的定義

27樓:匿名使用者

樓主可以這樣想,c語言中,無論是常量,變數,函式,只有先定義才能使用的。在函式定義時,大腦要往一般的常量,變數定義的方向,切忌先不要想函式的別的。定義好後,把函式的定義先放一邊,不管它。

接著是函式宣告,大家都知道,c語言是有一個主函式main()和0或n個普通函式組成的。由於當**越長,用到的函式就越多,為了減少函式的混淆,所以要有個函式名,就像老師點名一樣,宣告一個函式,就如點一個學生的名字。

總之,函式定義是系統要求的,不定義就錯誤,而函式宣告實際上不定義也行,但為了方便和減少錯誤,人為規定要宣告。

c語言的函式問題,c語言函式呼叫問題

可以不寫,但是要把你的自定義函式寫在主函式前面才行。就是說把z的值返回到主函式,本例中就是把z的值返回給c。不能不寫的,否則當編譯器編譯到你main函式時,由於還沒編譯到下面的max定義。所以它找不到max到底是什麼符號。一般申明都寫在函式後面的,否則,出了main外,其他函式看不到max的申明的。...

c語言函式遞迴呼叫的問題,C語言函式遞迴呼叫問題。

首先要知道fun 是一個定義的函式 fun a 相當於fun 3 由下面的函式定義得出fun 3 又fun 2 再求fun 0 因為0不滿足if裡的條件,所以不執行fun 1 所以是0120,希望樓主看明白 先呼叫fun 3 fun 3 中呼叫fun 2 fun 2 中呼叫fun 1 fun 1 中...

C語言中函式呼叫問題,C語言中函式的呼叫

首先我們來說一下,你這個程式是有很大的問題的。函式有且只有唯一一個返回值,當程式執行到return的時候,這個函式就結束並返回了。所以,你這裡寫2個return來返回最大值和最小值是不可能的。再者,如果你想使用返回值作為最大值,最小值的傳遞,那麼在main函式中,你呼叫star函式的時候需要一個變數...