Discussion:
沒有 #include <string.h> 相關函式也能使用??
(时间太久无法回复)
寒泉
2004-07-21 14:49:34 UTC
Permalink
我發現程式沒有#include <string.h>
strcpy, strcmp .....
在編譯時都沒出錯
程式也能執行耶
是不需要 #include <string.h>了嗎??

--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: ip-61-66-107-123.digiport.net.tw
小州
2004-07-21 15:32:29 UTC
Permalink
※ 引述《gentamicin (寒泉)》之銘言:
Post by 寒泉
我發現程式沒有#include <string.h>
strcpy, strcmp .....
在編譯時都沒出錯
程式也能執行耶
是不需要 #include <string.h>了嗎??
因為 string.h 裡面只是 strcpy() 這類函數的 "函數原型" 宣告,
實際程式碼實作是在 library 內,所以您編譯時 c compiler 只是
不知道 strcpy() 這類函數實際的函數原型宣告為何,不過最後於
linking 階段能夠在 library 內找到該函數就可以了。

寫 c 語言沒有養成引入正確標頭檔案,嚴重的問題在於無法讓 c compiler
檢查呼叫函數的傳入引數是否正確,也不知道是否有傳回值的資訊,這下
c compiler 得用 "假設" 這種處理,程式最後運作失常都是常有事情。

常看到網路 FAQ 問題就是使用 math.h 裡面的 sqrt() 函數,該函數原型
為:

double sqrt(double x);

沒引入 math.h 就貿然使用,那通常 c compiler 都會假設該函數的原型
應該是 int sqrt(...),所以使用這樣程式碼就會出錯:

int num1=100;
int result

result = sqrt(num1);

若有引入該 math.h 檔案,編譯過程 compiler 就會警告甚至出現錯誤讓
編譯的過程停止而不繼續下去。

而另外提到呼叫 strcpy() 卻沒有引入所需的 header ,程式碼這樣寫在
c++ 上面就不會過。c++ 嚴格要求呼叫的函數都必須要事前的函數原型宣告
資訊,如此才能夠正常編譯程式碼。

另外,這問題你應該上 programming 版問才對,因為這與 linux 系統
沒有關係 :)

--
真誠最可貴 用心最踏實
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: kendlee.sayya.org

Loading...