首頁 > 後端開發 > C++ > 為什麼有些C程式碼在C中編譯失敗?

為什麼有些C程式碼在C中編譯失敗?

DDD
發布: 2024-12-18 10:16:10
原創
415 人瀏覽過

Why Does Some C Code Fail to Compile in C  ?

C 作為C 的子集:異常解釋

雖然常說C 是C 的子集,但在某些情況下程式碼可以在C 中無縫編譯,但在C 中失敗。

程式碼的情況在C 失敗

  • 暫定定義:
    C 允許多次相同聲明變數名,但C 禁止這樣做,並顯示錯誤「n已經定義。 ] 到int * ()),而 C不允許這樣

    int n;
    int n; // error: redeclaration of 'n'
    登入後複製
  • K&R 函數定義樣式:
    C 允許使用語法int b(a) int a; 進行函數定義; { } ,但C 認為這是語法錯誤。

    int a[1];
    int (*ap)[] = &a; // error: 'a' does not have type 'int[]'
    登入後複製
  • 巢狀結構體作用域:
    C 允許使用類作用域宣告嵌套結構體,但C將它們視為局部變數

    int b(a) int a; { } // error: grammar error
    登入後複製
  • 預設聲明:
    C 允許宣告變數而不指定其類型(例如auto a;),但C 需要明確宣告類型說明符。

    struct A { struct B { int a; } b; int c; };
    struct B b; // error: 'b' has incomplete type
    登入後複製
  • C99 中的其他例外

    auto a; // error: type-specifier missing
    登入後複製
參數中的數字維度>

C99 禁止在陣列中使用像static這樣的說明符函數參數的維度。

  • 可變長度數組: C99 不支援可變長度數組(VLA),其中陣列大小計算為

    void f(int p[static 100]) { } // error: invalid syntax
    登入後複製
  • 靈活陣列成員: C99 缺少可以在其中包含可變大小資料成員的靈活數組成員(FAM)結構體。

    int n = 1;
    int an[n]; // error: 'n' is not a constant expression
    登入後複製
  • 限制限定符: C99 允許限制限定符指定記憶體的非別名,這是 C 不支援的。

    struct A { int a; int fam[]; }; 
    // error: 'fam' has incomplete type
    登入後複製

以上是為什麼有些C程式碼在C中編譯失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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