如何在 VSCode C++ 扩展中启用 C++17 支持

How to enable C++17 support in VSCode C++ Extension

我在 std::string_view 上不断收到错误曲线,但我能够正常构建。有没有办法告诉智能感知或 C++ linter 使用 C++17?

我得到的具体错误是:

namespace "std" has no member "string_view"

他们的 GitHub 问题跟踪器中有一个关于此的帖子:std::string_view intellisense missing (CMake, VC++ 2017)

在另一个问题中,据说该扩展默认为 C++17,但尚未支持所有 C++17 功能:Setting C++ standard.

c_cpp_properties.json Reference Guide 确认了这一点,其中列出了一个选项 cppStandard,默认为 C++17。 (要编辑此文件,请按 Ctrl + Shift + P 并输入 C/CPP: Edit Configurations ).

看来,他们只是还没有得到全面支持。

刚刚更新。我也遇到了这个问题。

我加c_cpp_properties.json

解决了
  1. Ctrl + Shift + P 然后 select C/C++:Edit Configurations (JSON)

  2. 调整cStandardcppStandard的内容:

        "cStandard": "gnu17",
        "cppStandard": "gnu++17",
    

如果尝试 and 的解决方案后仍无法启用,请执行以下操作

  1. .vscode 文件夹中打开 tasks.json
  2. "args:"下添加"--std","c++17"
  3. 保存tasks.json

现在这变得容易多了。在您的 vs 代码扩展设置中搜索 cppstandard,然后从下拉列表中选择您希望扩展使用的 C++ 版本。

为了确保您的调试器使用相同的版本,请确保您的 tasks.json 有类似这样的内容,其中重要的行是 --std ,其后的行定义版本。

{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++ build active file",
      "command": "/usr/bin/g++",
      "args": [
        "--std",
        "c++17",
        "-I",
        "${fileDirname}",
        "-g",
        "${fileDirname}/*.cpp",
        "-o",
        "${workspaceFolder}/out/${fileBasenameNoExtension}.o"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ],
  "version": "2.0.0"
}

请注意,如果您直接复制上述 tasks.json,您需要在工作区根目录中有一个名为 out 的文件夹。

对于试用 Linux 并安装了 GCC 7.5.0 的人来说,这对我有用。
执行这两个步骤以使 linter 能够确认 c++17 的写作并让编译器选择 c++17。

  1. 打开C/C++:Edit Configurations (JSON),将这两个字段的默认值改为:

"cStandard": "gnu18", "cppStandard": "gnu++17",

  1. 打开 .vscode 目录中的 tasks.json 文件并将以下语句添加到 args 键:

"--std", "c++17"

在尝试了很多事情之后,我找到了一个可能适用于使用 CMake 并愿意编辑 CMakeLists.txt 文件的人的解决方案。

我只是把下面这行放在 CMakeLists.txt

的开头

set (CMAKE_CXX_STANDARD 17)

您可以通过以下方式检查您的 C++ 版本: cout << __cplusplus ; 第三和第四个数字为您提供了您正在使用的 C++ 版本。

例如:

cout << __cplusplus ;

201703

表示您正在使用 c++ 17

cout << __cplusplus ;

201402

表示您正在使用 c++ 14

我认为一定有更简单的解决方案,但我还没有找到。