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 可以更改,而 mintreetreewalked 仍在范围内。您应该可以通过以下修改来解决此问题:

#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_treetree_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 文件夹之外,我认为没有办法全局设置它。