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

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

Barbara Streisand
發布: 2024-12-16 09:23:11
原創
576 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板