test.c內容如下
int f(int x); //這一行肯定是函式原型 function prototype
int f(int x) //這一行算不算函式原型呢?
{
return 100;
}
現在我把test.c內容改成如下,也就是沒有了int f(int x);那一行
int f(int x) //這一行算不算函式原型呢?
{
return 100;
uj5u.com熱心網友回復:
int f(int x); 這個可以看做宣告int f(int x) //這一行可以看做實作
return 100;
}
uj5u.com熱心網友回復:
https://zhidao.baidu.com/question/1964441885008271820.htmluj5u.com熱心網友回復:
函式宣告可以省略形參名,但是函式定義的首部必須寫出所有形參名并給出其對應的資料型別。函式原型的主要目的為宣告函式回傳值型別以及函式的期望接受的引數的個數、引數型別和引數順序
如果程式中沒有某個函式的函式原型(沒有說明),編譯系統就會用第一次出現的這個函式(函式定義或函式呼叫)建構式原型
在預設下編譯系統默認函式回傳值為int
而對函式引數型別不做任何假設
常見錯誤
和函式原型不匹配的函式呼叫會導致語法錯誤
函式原型和函式定義不一致,也會產生錯誤
C語言環境下,如果函式不進行宣告就使用,可能會發生錯誤,因為默認將回傳值做為int型別來處理,所以,最好是在使用之前對函式進行宣告。
感覺樓主還是比較懶的,網上的資訊還是比較多的,為什么不親自找找并總結一下。如果看一個帖子的說明還懷疑,看2個可能可以做個對照,看多個的時候可以總結一下那個更靠譜的定義。
最后還真別鉆牛角尖,沒用的。
uj5u.com熱心網友回復:
網上的資訊未必是對的,很多文字邏輯混亂
另外,這個不存在鉆牛角尖一說,概念是要搞清楚的。
uj5u.com熱心網友回復:
好吧,慣著你。前提是編譯器和你一樣從頭開始流式閱讀源檔案。C意義下所謂原型prototype,它是干啥的呢?
用于在函式被呼叫之前通知編譯/連接器,這個函式有幾個引數,每個引數是什么型別的,以及捎帶著預期的回傳值是什么型別的。
為啥要通知是另一個問題。
于是,凡是起這個作用的,出現在函式被呼叫的行的上方的函式宣告/函式定義都可以被編譯/連接器理解為是prototype。
通常我們寫那個宣告的目的是為了解放函式定義的位置,
所以,在一個程式中如果你能保證函式定義和函式呼叫出現在同一個源檔案,并且定義總在呼叫上方出現,那就完全不必出現函式宣告。
所以所以,在通常的語境下,我們稱頭檔案里的函式宣告,以及源檔案里位于靠近檔案頭方向的函式宣告為 函式原型。
uj5u.com熱心網友回復:
反過來說,出現在呼叫點下方/其他檔案里的函式定義不起原型作用,因此不認為是原型。uj5u.com熱心網友回復:
總結,在呼叫點上方讓編譯器兩眼一抹黑的就叫沒有原型,無論你在下面寫得多么完善。uj5u.com熱心網友回復:
所以,你需要判斷和總結。從網上查資料還是比較快的,如果去查專門的文獻或書籍,我想你沒這么快。網上的表述可能加上了很多人自己的見解在里面,并且可能講解的更通俗易懂,更多時候還會有例子。一個概念,可能描述的不見得你就能理解。
uj5u.com熱心網友回復:
我們都知道C語言提倡在呼叫之前通過包含頭檔案等手段先提供函式原型,我們照辦。凡是違反這個原則的,在C猿看來都是大逆不道。
所以我仍然表示我無法提供你所需要的函式原型的精確定義。從而無法正面回答你的問題。5樓所述都是側面功能性描述。
從而我也仍然認為你的糾結是鉆牛角尖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/249146.html
標籤:C語言
