尽管设置了configurationProvider,CMAKE_CXX_STANDARD 也不影响智能感知

问题描述 投票:0回答:1

我的程序根据我在 CMakeLists.txt 文件中设置的 C++ 标准正确构建,但 Intellisense 将较新的功能标记为错误,即使我告诉它遵循 CMake 的配置信息。

我在 VSCode 中使用 CMake 和 CMake 工具扩展来编辑 C++ 项目。在我的根文件夹 CMakeLists.txt 中,我有

set(CMAKE_CXX_STANDARD 23)

在我的一个头文件中,我使用以下 C++23 功能(大括号运算符中的多个参数):

  Port *operator[](const string name, const size_t index) { /* .. code .. */ }

正如预期的那样,我可以很好地构建并运行这个程序。但智能感知总是将该行标记为错误,说参数太多:

too many parameters for this operator function C/C++(344)

我的

c_cpp_properties.json
文件包含以下内容:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "intelliSenseMode": "linux-gcc-arm64",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

我也尝试过添加

"cppStandard": "c++23",
,没有区别。

环境信息

我在树莓派上运行Linux。 Pi 正在无头运行,我正在使用 SSH VS 代码扩展从另一台计算机进行编辑。我怀疑这会影响它,因为我相信 C/C++ 扩展在 pi 上运行,并且无论我是从 Windows 还是 Linux 机器远程处理,我都会看到完全相同的事情。

c++ visual-studio-code cmake intellisense c++23
1个回答
0
投票

答案在评论中,发布在这里供任何发现此问题且有相同问题的人使用。

不同的编译器和语言解析器以自己的速度实现 C++ 功能。 Intellisense 使用 Edison Design Group (EDG) C++ 前端。碰巧的是,EDG 尚不支持此功能(多维大括号运算符),因此无论我更改什么设置,都会出现错误。它受 GCC 支持,这是 CMake 所使用的,因此构建工作正常。

我相信唯一的“解决方案”就是等到 EDG 在未来的更新中支持此功能。

有关各种语言解析器和编译器支持哪些功能的信息,请参阅此链接:https://en.cppreference.com/w/cpp/compiler_support

© www.soinside.com 2019 - 2024. All rights reserved.