C99 和C 相容性異常
雖然C 通常是C 的子集,但C 語言中的某些細微差別禁止直接編譯某些有效的C 程式碼。以下是一些需要考慮的關鍵差異:
1。無暫定定義
C 允許多次宣告同名變量,但 C 不允許。因此,以下在 C 中有效的程式碼將無法在 C 中編譯:
int n; int n; // ill-formed: n already defined
2。不相容的陣列類型
在 C 中,可以使用 int[] 或 int[N] 語法來宣告陣列。然而,C 對這些的處理方式有所不同。以下程式碼在 C 中有效,但在 C 中將引發錯誤:
int a[1]; int (*ap)[] = &a; // ill-formed: a does not have type int[]
3。不允許 K&R 函數定義風格
C 支援 K&R 函數定義風格,但 C 不支援。以下程式碼在 C 中有效,但無法在 C 中編譯:
int b(a) int a; { } // ill-formed: grammar error
4。嵌套結構體作用域差異
在 C 中,嵌套結構體具有文件作用域,而在 C 中,它們具有類作用域。這意味著以下在 C 中有效的程式碼將無法在 C 中編譯:
struct A { struct B { int a; } b; int c; }; struct B b; // ill-formed: b has incomplete type (*not* A::B)
5。 No Default int
與 C 不同,C 不允許將整數變數預設為 int。因此,以下在C 中有效的程式碼將在C 中引發錯誤:
auto a; // ill-formed: type-specifier missing
C99 中的其他例外
除了這些例外之外, C99 引入了與 C的進一步不相容性:
以上是C99 和 C 程式碼的哪些差異會導致編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!