在 C 和 C 中均有效的程式碼在特定語言編譯器中的表現是否會有所不同?
C 和 C 有許多相似之處,但也有顯著差異存在。這就提出了一個問題:當使用每種語言的特定編譯器進行編譯時,兩種語言的有效程式碼是否可能表現出不同的行為。
忽略與預處理器相關的駭客行為並假設實現定義方面的一致性,這是出現這種行為差異的一種情況出現的是函數呼叫和物件聲明的處理。
在這種情況下,下面的範例示範了 C 和 C 之間的差異:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
在 C 中,此程式碼觸發建立立即銷毀的臨時 f 物件。因此,它不會產生任何輸出。
相反,C90 允許呼叫未宣告的函數。因此,當使用 C90 編譯器編譯時,程式碼將輸出「hello」。
這種差異的根源在於 C90 將聲明 f() 視為函數調用,而 C 將其解釋為f 物件的聲明。這種區別突顯了細微差別,這些細微差別可能導致不同程式語言的不同行為。
以上是當使用特定於語言的編譯器編譯時,C 和 C 中的有效程式碼的行為是否會有所不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!