1 什麼是c語言的隱式函式宣告
在c語言中,函式在呼叫前不一定非要宣告。如果沒有宣告,那麼編譯器會自動按照一種隱式宣告的規則,為呼叫函式的c**產生彙編**。下面是乙個例子:
? 1
2 3 4 5
int main(int argc, char** argv)
單純的編譯上述源**,並沒有任何報錯,只是在鏈結階段因為找不到名為any_name_function的函式體而報錯。
? 1
2 3 4 5
[smstong@centos192 test]gc
c−cm
ain.
c[sm
ston
g@ce
ntos
192tes
t]gcc main.o
main.o: in functionmain':
main.c:(.text+0x15): undefined reference toany_name_function』
collect2: ld 返回 1
之所以編譯不會報錯,是因為c語言規定,對於沒有宣告的函式,自動使用隱式宣告。相當於變成了如下**:
? 1
2 3
4 5
6int any_name_function();
int main(int argc, char** argv)
2 帶來的問題
2.1 隱式宣告函式名稱恰好在鏈結庫中存在,但返回非int型別
前面給出的例子,並不會造成太大影響,因為在鏈結階段很容易發現存在的問題。然而下面這個例子則會造成莫名的執行時錯誤。
? 1
2 3
4 5 6 7
C語言中的隱式函式宣告
在c89中,函式在呼叫前不一定非要宣告。如果沒有宣告,那麼編譯器會自動按照一種隱式宣告的規則,為呼叫函式的c 產生彙編 下面是乙個例子 int main int argc,char ar 單純的編譯上述源 並沒有任何報錯,只是在鏈結階段因為找不到名為any name function的函式體而報錯。...
C語言函式隱式宣告(1)
這段時間,在看中心後台服務軟體原始碼時發現,有很多自定義函式未經 宣告卻能在主程式中被呼叫,主程式中沒有包括上述函式的標頭檔案,我在各個目錄中也找不到上述函式的標頭檔案。這就奇怪了,連使用標準庫函式printf 都要包括標準輸入輸出標頭檔案,何況是自定義函式?這個問題困擾了我很久。前天問中創公司奚鍾...
C語言函式隱式宣告(2)
1 什麼是c語言的隱式函式宣告 在c語言中,函式在呼叫前不一定非要宣告。如果沒有宣告,那麼編譯器會自動按照一種隱式宣告的規則,為呼叫函式的c 產生彙編 下面是乙個例子 int main int argc,char argv 單純的編譯上述源 並沒有任何報錯,只是在鏈結階段因為找不到名為any nam...