如何在“打开文件夹”开发(linux-gcc模式)中选择C++标准

Hui Liu-MSFT 48,681 信誉分 Microsoft 外部员工
2024-03-20T08:01:36.1766667+00:00

我是 Visual Studio 的新手,正在尝试迁移我的项目,以期待即将到来的 C++20 支持。 我在 MinGW / Cygwin 环境中工作,我正在尝试为其设置“打开文件夹”开发。到目前为止,我添加了相应的 CppProperties.json 和 tasks.vs.json 文件,如 open-folder-projects-cppusing-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)

开发人员技术 | C++
0 个注释 无注释
{count} 票

接受的答案
  1. 匿名
    2024-03-21T06:07:47.1633333+00:00

    在这种情况下,如何正确设置 C++ 标准,以便正确分析所有语法(包括带有传入的 Visual Studio 16.8 的 C++20?)?

    我建议您可以尝试使用“compilerSwitches”: “/std:c++latest”


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。