int n = 5;
int arr[n]; // VS2015 編譯錯誤 C2057: required constant expression
即使 const int n = 5; 也報錯。
Microsoft C 編譯器(MSVC)不支援 C99 標準,僅支援 C90 (C89) 核心語言特性。VLA 屬於 C99 新增,MSVC 歷史包袱與 Windows 內核開發穩定性考量,至今未實現。
| 方案 | 適用場景 | 代碼示例 |
|---|---|---|
| 動態分配 | 運行時才知大小,生命週期可控 | int *arr = malloc(n * sizeof(int)); ... free(arr); |
| std::vector (C++) | C++ 專案,自動管理內存 | std::vector |
| 固定最大尺寸 | 上限可預估,嵌入式/棧內存充足 | #define MAX_N 1000; int arr[MAX_N]; |
| C99 支援編譯器 | 必須用 VLA 且不想改代碼 | GCC (MinGW), Clang, Intel ICC |
Windows 平台 C 專案首選 malloc/free;C++ 專案直接用 std::vector。若跨平台協作,在 CMake 中設置 set(C_STANDARD 99) 並要求 GCC/Clang 編譯。