如何在 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
解决了
Ctrl + Shift + P 然后 select C/C++:Edit Configurations (JSON)
调整cStandard
和cppStandard
的内容:
"cStandard": "gnu17",
"cppStandard": "gnu++17",
如果尝试 and 的解决方案后仍无法启用,请执行以下操作
- 在
.vscode
文件夹中打开 tasks.json
- 在
"args:"
下添加"--std","c++17"
- 保存
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。
- 打开
C/C++:Edit Configurations (JSON)
,将这两个字段的默认值改为:
"cStandard": "gnu18", "cppStandard": "gnu++17",
- 打开
.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
我认为一定有更简单的解决方案,但我还没有找到。
我在 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
Ctrl + Shift + P 然后 select
C/C++:Edit Configurations (JSON)
调整
cStandard
和cppStandard
的内容:"cStandard": "gnu17", "cppStandard": "gnu++17",
如果尝试
- 在
.vscode
文件夹中打开tasks.json
- 在
"args:"
下添加"--std","c++17"
- 保存
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。
- 打开
C/C++:Edit Configurations (JSON)
,将这两个字段的默认值改为:
"cStandard": "gnu18", "cppStandard": "gnu++17",
- 打开
.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
我认为一定有更简单的解决方案,但我还没有找到。