在Visual Studio中如何声明数组?VSCode可运行代码迁移后报错如何解决
问题原因分析
你遇到的编译报错本质是不同编译器对非标准C++特性的支持差异导致的:
- 你在VSCode中使用的大概率是GCC/Clang编译器,这类编译器对C++做了自定义扩展,支持C99标准的*可变长度数组(VLA)*特性,也就是允许用运行时才能确定值的变量作为数组长度,因此代码可以正常编译运行
- Visual Studio使用的MSVC编译器没有对C提供可变长度数组的扩展支持,而可变长度数组本身不属于任何版本的C官方标准,因此编译时会直接抛出错误。
修复方案
有两种合规的C++实现方案可以替代原写法,兼容所有主流编译器:
- 使用C++标准库提供的
std::vector实现动态长度数组,这是最通用的方案:
#include <Windows.h> #include <string> #include <cstdio> #include <vector> using namespace std; int main() { string s = "abcdefg"; vector<int> arr(s.size()); }
- 如果需要使用栈上分配的数组,可将数组长度改为编译期即可确定的常量:
#include <Windows.h> #include <string> #include <cstdio> using namespace std; int main() { constexpr int arr_len = 7; // 编译期常量 string s = "abcdefg"; int arr[arr_len]; }
内容的提问来源于stack exchange,提问作者31蔡承諺 Nemo
相关产品推荐
相关产品推荐

