首頁 >後端開發 >C++ >C中的變長數組符合標準嗎?

C中的變長數組符合標準嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-12 20:53:12391瀏覽

Do Variable-Length Arrays in C   Conform to the Standard?

C 中的可變長度數組:探索一致性和標準合規性

下面的C 程式碼片段引發了關於它是否符合語言的問題標準,特別是關於常數表達式:

int main()
{
  int size = 10;
  int arr[size];
}

在 C標準中(8.3.4/1),數組的大小必須是「整數常數表達式」。在上面的範例中,Size 似乎缺少此屬性。

可變長度數組(VLA) 和編譯狀態

程式碼使用gcc 4.8 和Clang 3.2 成功編譯因為兩個編譯器都支援可變長度數組(VLA ) 作為C 中的擴展。但是,Visual Studio CTP 拒絕該程式碼,並顯示錯誤訊息,提示大小為零。此行為與 C 標準一致,該標準不允許可變大小的陣列。

編譯器警告和語言擴展

某些編譯器,例如 gcc 和 clang,使用帶有 -pedantic 標誌的 VLA 時提供警告。該標誌警告潛在的非標準功能,表明代碼違反了 C 標準。在這種情況下,陣列缺乏常數大小使得 VLA 的使用不合適。

積分常數表達式

積分常數表達式,根據 C 草案標準 (5.19 .3),必須滿足特定條件。在這種情況下,使用文字初始化的 size 將其限定為整型常數表達式。但是,為了符合C 標準,應使用“const”或“constexpr”明確聲明它,如下所示:

const int size = 10;

constexpr int size = 10;

結論

結論結論結論 >雖然可變長度數組提供了靈活性,但它們的使用必須與標準合規性相平衡。 Visual Studio 等編譯器遵守 C 標準並拒絕違反其規則的程式碼。透過理解整數常數表達式的概念並考慮語言擴展,開發人員可以確保他們的程式碼符合功能和標準化要求。

以上是C中的變長數組符合標準嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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