我写了这个基本的 C 程序:
int main(int argc, char const *argv[])
{
int n = rand();
int a[n];
return a[0];
}
哪个在 gcc 中正确编译。但是 MS C/C++ 智能感知在显示错误曲线时指出expression must have a constant value C/C++(28) [4, 8]
。经过一番谷歌搜索后,我发现 MSVC 尚未实现 VLA。但我无法找到一种方法来抑制这个错误。有人请帮帮我!
EDIT:此外,令人惊讶的是,它没有对隐式声明发出警告rand
在第 3 行!
EDIT:如果可能的话,有人还可以提到 C/C++ 的替代扩展吗?
EDIT: 我在用:
- 微软 VSCode v1.63.2 代码编辑器
- Microsoft C/C++ 扩展包 v1.1.10 扩展
- MinGW-W64 gcc v8.1.0 编译器
GCC 未设置编译标志。
C/C++ 扩展配置如下:
- 编译器路径:
C:\Program Files\mingw-w64\mingw64\bin\gcc.exe
- cpp标准:gnu++20
- c标准:gnu17
- 智能感知模式:
windows-gcc-x64
这显示为错误,因为它确实是错误。当您使用MSVC
编译器只会给你结果MSVC
汇编。
现在,这实际上是因为你做错了事情。看来你想初始化一个大小为n
这是从随机值获得的。换句话说,您应该执行动态分配 https://www.programiz.com/c-programming/c-dynamic-memory-allocation,即运行时的内存分配。由于您使用的是 C,因此必须使用malloc https://en.cppreference.com/w/c/memory/malloc其功能如图所示:
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int n = rand();
int *a = malloc(n * sizeof(int));//Dynamic allocation of an array
int val = a[0];//Garbage value
free(a);//Deallocation / Free the memory taken by array
return val;
}
如果想更换MSVC
with gcc
,您可以通过更改设置来更改 VS code 中 C/C++ 的默认编译器:
更改您的设置
C_Cpp.default.compilerPath` : C:\MinGW\bin\g++.exe
编辑:我错误地提到路径应该是 bin 文件夹。相反,它应该是g++.exe
本身。我下载了最新的二进制文件并为您确认。
您可以通过转到 VS code 首选项,搜索C_Cpp.default.compilerPath
在搜索栏中,这将引导您进入所需的输入框。进入C:\mingw64\bin\gcc.exe
并且编译将替换MSVC
with gcc
/g++
最后,尽量避免 VLA 并使用动态分配,因为这是一种更安全且得到广泛支持的做法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)