2013-09-30 134 views
0

爲什麼編譯源代碼,當它與長城選項啓用,調用某些功能會產生這樣的警告如 warning: incompatible implicit declaration of built-in function 'strcpy' [enabled by default]|"警告:默認情況下啓用]

我的內置函數「功能XYZ」的不兼容的隱式聲明查閱了該功能並添加了標題,警告消失了。當(顯然)不需要時添加標頭的優點和缺點是什麼?

+1

您應該考慮升級到C99編譯器。使用GCC很容易:只需下載最新版本並用'-std = c99'編譯。 – Lundin

+0

[warning:內置函數'xyz'的不兼容隱式聲明]的可能重複(http://stackoverflow.com/questions/977233/warning-incompatible-implicit-declaration-of-built-in-function-xyz) 。 –

+0

除了上面提到的之外,許多[在StackOverflow上搜索此消息]的結果(http://stackoverflow.com/search?q=warning%3A+incompatible+implicit+declaration+of+built-in +函數+是%3Aquestions)也可以被認爲是重複的。 –

回答

8

沒有「優點和缺點」。在使用其中聲明的函數之前,您必須始終包含標題。你應該認爲這是一個徹頭徹尾的錯誤,否則。 C允許「隱式聲明」的事實是一個歷史遺蹟,永遠不會在實際代碼中使用。

3

當您忘記包含標題時,編譯器會假定該函數的返回類型爲int,這稱爲隱式聲明。建議不要使用它,因爲它很容易出錯,並且自C99以後就被刪除了。

0

因爲所有strcpy,strcat都內置函數。它直接查找文件string.h

相關問題