首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2015 不支援 C99 變長數組(VLA):原因與替代方案

     編輯:程式設計綜合問答

現象


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 vec(n);
固定最大尺寸上限可預估,嵌入式/棧內存充足#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 編譯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved