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