[爆卦]函式定義是什麼?優點缺點精華區懶人包

為什麼這篇函式定義鄉民發文收入到精華區:因為在函式定義這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者nowar100 (拋磚引玉)站內C_and_CPP標題Re: [問題] 請問函式讀不到的問題時...


我把編譯原理講一下好了,這樣你就知道了
假設今天你有兩個檔案


// sub.cpp
int sub(int a, int b) {
return a>b? a-b: b-a;
}

//main.cpp
int main(){
sub(5, 3);
}


在compile的時候,他會看看sub.cpp,發現了一個sub函式的定義
檢查後確定無誤,好,sub.cpp這檔案編譯完成
接下來看看main.cpp,他發現呼叫了sub這個函式,於是compiler會往上找
可是他在main.cpp裡面怎麼往上找就是找不到sub的宣告
於是他跟你說他找不到這東西,停止編譯


函式能被定義一次,但是可以宣告多次
宣告的意思就像是跟編譯器說「你看我有這個東西」


所以我們通常如果把程式分多個檔案寫
會把函式宣告寫到.h檔裡面,把定義寫到一個.cpp就可以了
用意是要讓大家可以透過#include看的到這函式即可
然後再把.cpp去#include這個.h
#include .h可以把他想成是他會把.h的東西放到cpp裡面來
所以該例會變成


// main.h
int sub(int, int);

// sub.cpp
int sub(int a, int b){
return a>b? a-b: b-a;
}

// main.cpp
#include "main.h"
int main(){
sub(5, 3)
}


這樣compiler在檢查main.cpp的時候,發現他要呼叫到sub函式
他會往上看,這時候因為你有#include宣告,所以他會找到一個候選的sub函式
接著比對型別,型別一致,
編譯器認定沒問題,編譯完成。



※ 引述《mulder1985 (老人)》之銘言:
: 請問一下大家
: 就是我的程式有寫一些副函式
: 可是在compile的時候
: 會出現有些副函式"identifier not found"
: 但是有些卻不會
: 請問這類情況要如何解決呢?
: 謝謝


--

文筆不是很好阿 嘆~
一直想寫一些基本的東西給新手好入門,像是pointer & array,overloading
不過寫出來不清不處會讓人更困惑吧 囧rz

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.143.227
VictorTom:推一下:) 10/23 02:09
VictorTom:話說, 雖然說可以宣告多次, 不過是寫宣告在不同檔案裡. 10/23 02:10
VictorTom:在同一個.cpp如果能看到同樣的宣告兩次, 記得也是會 10/23 02:10
VictorTom:error的....@_@" 10/23 02:10
QQ29:不會error耶 VC的話 = = 10/23 02:12
nowar100:不會耶 我剛也用gcc/g++試過 多次宣告沒問題 10/23 02:14
VictorTom:(大驚) 我記錯了嗎....@_@" 10/23 02:14
VictorTom:對不起, 真的是我自己記錯了....Orz 10/23 02:16
VictorTom:非常抱歉, 可能是和會ambiguous的狀況搞錯了<(_ _)> 10/23 02:18
nowar100:V大寫過太多程式 所以搞混了 我也常這樣 XD 10/23 02:18
nowar100:ambiguous是多個候選版本但選不出結果 沒記錯的話XD? 10/23 02:18
VictorTom:套一句網路上忘了哪裡看來的文章裡人家說的話.... 10/23 02:18
VictorTom:等我寫了幾年的程式以後才發現, 其實我只是寫了同樣的程 10/23 02:19
VictorTom:事寫了好幾年....Orz 10/23 02:19
VictorTom:對啊~overloading寫壞ambiguous時,compiler就會抱怨了XD 10/23 02:20
nowar100:大家都是這樣吧 然後就會在發現的這一刻實力提升了 XD 10/23 02:20
VictorTom:可能的話, 人家比較想薪水提升一下啊....(淚奔Q_Q~) 10/23 02:21
h520:原po的方法是教大家避免multiple definition吧 10/23 07:46
QQ29:不是耶 重複定義 避免的方式 很多 10/23 12:27
QQ29:這篇只是單純講一下 編譯順序而已... 10/23 12:27

你可能也想看看

搜尋相關網站