VScode "expression must have a constant value" 在 c99 模式下
VScode "expression must have a constant value" in c99 mode
我想做什么:
我需要将整数写入二维数组。数组的长度是N*N。所以我 scanf 从用户那里获取 N 的值。
C/C++ 扩展给出了“表达式必须有一个常量值”。但是用 gcc 构建它工作得很好
我试过的:
C/C++ 扩展在两个数组中的 N
上给出错误,“表达式必须具有常量值”。
在谷歌上搜索了一些答案后,我尝试在扩展中将我的编译器版本设置为 c99,因为这是支持可变长度数组的版本。但它仍然给出相同的错误。尝试使用其他较新的 c 版本,智能仍然给出相同的错误。
代码和设置:
tree.c:
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, i, j;
scanf("%d", &N);
int min_tree[N][N];
int tree_walked[N];
}
c_cpp_properties.json:
{
"name": "TUF_Laptop",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include",
"/usr/include",
"/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include",
"/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include-fixed",
"/usr/lib/gcc/x86_64-pc-linux-gnu"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "/usr/bin/gcc",
"intelliSenseMode": "linux-gcc-x64",
"compilerArgs": [
"-O3 -Wall -Wextra -std=c99"
],
"cStandard": "c99",
"cppStandard": "gnu++17",
"compileCommands": ""
}
我找到的类似答案:
IDE 可能会警告您潜在的编程错误,因为值 N
可以更改,而 mintree
和 treewalked
仍在范围内。您应该可以通过以下修改来解决此问题:
#include <stdio.h>
#include <stdlib.h>
int main() {
int N_scan, i, j;
scanf("%d", &N_scan);
const int N = N_scan;
int min_tree[N][N];
int tree_walked[N];
}
当 min_tree
和 tree_walked
在范围内时,无法更改 N
的值。
这里有一个类似的答案(针对 C++ 案例):
.
补充一下另一个答案,VS Code 的智能感知默认使用 MSVC 作为编译器。 MSVC 不支持整个 C99,包括非恒定长度数组。
您可以更改 VS Code 设置中使用的编译器,并将其设置为支持此功能的 GCC。
在 vs 代码中,在命令面板 (Ctrl + Shift + P) 中键入“C/C++: Edit Configurations (UI)”(不带引号)并编辑配置。但是,它会在您的文件夹中创建一个 .vscode/c_cpp_properties.json 文件。除了将此文件复制到每个 .vscode 文件夹之外,我认为没有办法全局设置它。
我想做什么:
我需要将整数写入二维数组。数组的长度是N*N。所以我 scanf 从用户那里获取 N 的值。
C/C++ 扩展给出了“表达式必须有一个常量值”。但是用 gcc 构建它工作得很好
我试过的:
C/C++ 扩展在两个数组中的 N
上给出错误,“表达式必须具有常量值”。
在谷歌上搜索了一些答案后,我尝试在扩展中将我的编译器版本设置为 c99,因为这是支持可变长度数组的版本。但它仍然给出相同的错误。尝试使用其他较新的 c 版本,智能仍然给出相同的错误。
代码和设置:
tree.c:
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, i, j;
scanf("%d", &N);
int min_tree[N][N];
int tree_walked[N];
}
c_cpp_properties.json:
{
"name": "TUF_Laptop",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include",
"/usr/include",
"/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include",
"/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include-fixed",
"/usr/lib/gcc/x86_64-pc-linux-gnu"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "/usr/bin/gcc",
"intelliSenseMode": "linux-gcc-x64",
"compilerArgs": [
"-O3 -Wall -Wextra -std=c99"
],
"cStandard": "c99",
"cppStandard": "gnu++17",
"compileCommands": ""
}
我找到的类似答案:
IDE 可能会警告您潜在的编程错误,因为值 N
可以更改,而 mintree
和 treewalked
仍在范围内。您应该可以通过以下修改来解决此问题:
#include <stdio.h>
#include <stdlib.h>
int main() {
int N_scan, i, j;
scanf("%d", &N_scan);
const int N = N_scan;
int min_tree[N][N];
int tree_walked[N];
}
当 min_tree
和 tree_walked
在范围内时,无法更改 N
的值。
这里有一个类似的答案(针对 C++ 案例):
.
补充一下另一个答案,VS Code 的智能感知默认使用 MSVC 作为编译器。 MSVC 不支持整个 C99,包括非恒定长度数组。
您可以更改 VS Code 设置中使用的编译器,并将其设置为支持此功能的 GCC。
在 vs 代码中,在命令面板 (Ctrl + Shift + P) 中键入“C/C++: Edit Configurations (UI)”(不带引号)并编辑配置。但是,它会在您的文件夹中创建一个 .vscode/c_cpp_properties.json 文件。除了将此文件复制到每个 .vscode 文件夹之外,我认为没有办法全局设置它。