C 和C 之間有效程式碼的行為差異
雖然C 和C 有許多相似之處,但在某些情況下,兩者中的有效程式碼都存在當用每種語言編譯時,語言可以產生不同的結果。
函數呼叫和物件宣告
其中一種情況與函數呼叫和物件宣告的差異有關。在C90中,無需事先聲明即可呼叫函數。然而,在 C 中,不允許使用未宣告的函數。這種差異可能會導致編譯以下程式碼時出現不同的行為:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
在C 中,此程式碼不會列印任何內容,因為建立並銷毀了類型f 的臨時對象,導致x 成員丟失。然而,在 C90 中,它會列印“hello”,因為函數無需聲明即可呼叫。
消除名稱歧義
另一點需要注意的是使用範例程式碼中的名稱 f。 C 和 C 都允許對函數和結構使用相同的名稱。要在 C 中建立對象,必須明確指定 struct f。如果省略 struct 關鍵字,程式碼將被解釋為函數呼叫。這種差異與呼叫約定的差異相結合,導致了在 C 和 C 編譯程式碼時觀察到的不同行為。
以上是為什麼相同的程式碼在 C 中列印“hello”,而 C 中沒有任何東西列印?的詳細內容。更多資訊請關注PHP中文網其他相關文章!