首頁 >後端開發 >C++ >C99 和 C 程式碼的哪些差異會導致編譯錯誤?

C99 和 C 程式碼的哪些差異會導致編譯錯誤?

Barbara Streisand
Barbara Streisand原創
2024-12-16 09:23:11580瀏覽

What C99 and C   Code Differences Cause Compilation Errors?

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

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