首頁  >  文章  >  後端開發  >  為什麼相同的程式碼在 C 中列印“hello”,而 C 中沒有任何東西列印?

為什麼相同的程式碼在 C 中列印“hello”,而 C 中沒有任何東西列印?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-09 16:25:03732瀏覽

Why Does the Same Code Print

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn