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 更嚴格的規則與 C 較寬鬆的方法有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!