在这种情况下,如何正确设置 C++ 标准,以便正确分析所有语法(包括带有传入的 Visual Studio 16.8 的 C++20?)?
我建议您可以尝试使用“compilerSwitches”: “/std:c++latest”
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。
我是 Visual Studio 的新手,正在尝试迁移我的项目,以期待即将到来的 C++20 支持。 我在 MinGW / Cygwin 环境中工作,我正在尝试为其设置“打开文件夹”开发。到目前为止,我添加了相应的 CppProperties.json 和 tasks.vs.json 文件,如 open-folder-projects-cpp 和 using-mingw-and-cygwin-with-visual-cpp-and-open-folder 中所述,大多数事情都可以正常工作。
但是,我遇到了更多最新 C++ 标准的语法错误问题。C++ 的 IntelliSense / 解析似乎工作正常(例如“auto i = 0;”显示没有错误),但我收到 C++17 构造的语法错误。例如,以下显示语法错误:
if (int i = 0; i); // syntax error: "expected a ')'"
auto [i, j] = std::pair<int, int>{ 1,2 }; // syntax errors: "expected an identifier", "identifier "j" is undefined"
这是我的 MinGW 设置的大部分(所有相关部分)CppProperties.json文件:
{
"configurations": [
{
"inheritEnvironments": [
"Mingw64"
],
"name": "Mingw64",
"includePath ,": [
"${env.INCLUDE}",
"${workspaceRoot}\\include"
],
"defines": [
"__cplusplus=201709L"
],
"intelliSenseMode": "linux-gcc-x64",
"environments": [
{
"MINGW64_ROOT": "C:\\msys64\\mingw64",
"FLAVOR": "x86_64-w64-mingw32",
"TOOLSET_VERSION": "10.2.0",
"PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.PATH}",
"INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};${env.MINGW64_ROOT}\\include;",
"environment": "Mingw64"
}
]
}
]
}
我还必须专门添加“__cplusplus=201709L”,以便例如使用没有错误的 <filesystem> 标头。但是,这并不能修复语法错误。我还尝试添加 ' “compilerSwitches”: “-std=c++17” ',但这并没有区别。
希望这在某种程度上是可能的,因为消除IDE语法错误是我尝试迁移到Visual Studio的主要原因,因为我当前的IDE(Eclipse)中随机不正确的语法错误正在失控,我也找不到任何C++支持的计划。所以:
在这种情况下,如何正确设置 C++ 标准,以便正确分析所有语法(包括带有传入的 Visual Studio 16.8 的 C++20?)?
Note:此问题总结整理于:How to choose C++ standard in "Open folder" development (linux-gcc mode)