首頁 > 後端開發 > C++ > C 更嚴格的規則與 C 較寬鬆的方法有何不同?

C 更嚴格的規則與 C 較寬鬆的方法有何不同?

Barbara Streisand
發布: 2024-12-15 05:06:30
原創
159 人瀏覽過

How Does C  's Stricter Rules Differ from C's More Lenient Approach?

C 的不完整性:C 與其子集的分歧

儘管經常聲稱C 完全包含在C 中,但細微的區別使得這一點斷言不完整。本文重點介紹了 C 中可接受的程式碼在 C 中不相容的情況,闡明了它們之間的差異。

複雜的確定性

C 對變數強制執行更嚴格的規則定義,禁止試探。重複宣告同一個變量,如 int n; int n;, 在 C 中是不允許的,與 C 不同。

數組相容性差異

C 引入了 C 中不存在的類型相容性約束。在 C 中,陣列 int a[1] 可以指派給指標 int (*ap)[] = &a,儘管其型別不同(int[] 與 int[] )整數[1])。這個賦值在 C 中會失敗。

過時的函數定義

C 放棄了函數定義的 K&R 風格,呈現像 int b(a) int a語法的結構; { } 如此不正確。

嵌套結構體作用域差異

C 中的嵌套結構體具有類作用域,與 C 不同。因此,在封閉結構體之外聲明嵌套結構體定義,例如struct B b;,會導致C 中的不完整型別錯誤.

需要明確型別說明符

C 要求所有聲明都使用明確型別說明符。省略型別訊息,如 auto a;,會導致語法錯誤。

C99 會帶來更多差異

C99 引入了額外的不相容性:

  • 數組維度:
  • 數組維度: 陣列維度中的宣告說明符參數清單現在必須與C 語法保持一致(void f(int p[static 100]) { })。
  • 可變長度數組: C 禁止使用非常量表達式進行數組維度計算(int n = 1; int an[n];).
  • 靈活陣列成員: C 不允許靈活的陣列成員(struct A { int a; int fam[]; })。
限制限定符: C 引入了用於別名分析的限制限定符,它們是C 中不存在(void copy(int *restrict src, int *restrict dst);) 。

以上是C 更嚴格的規則與 C 較寬鬆的方法有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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