最近使用MacOS来完成闫令琪老师的games101课后作业,发现编译器一直提示语法错误,例如无法识别constexper关键字等错误。
在我的win10+vscode+mingw环境下却没有出现语法报错,所以断定是clang++配置的问题。
0.安装vscode和clang(本文略去)
1.首先通过终端来检查mac中clang的版本号,终端下输入:clang --version
目前终端中显示的clang版本是12.0.0。根据clang官方网站上显示对C++标准的支持如下:
可以根据这个表来判断自己电脑中clang支持哪个C++标准。
2.在vscode中安装下面的2个插件:
3.回到自己的c++代码中,选择Terminal->Configure Default Build Task
然后选择C/C++:clang++生成活动文件:
随后会打开一个tasks.json文件,根据vscode官方网站上对clang的安装及配置教程(https://code.visualstudio.com/docs/cpp/config-clang-mac),将内容替换为官方文档的内容:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "clang++ build active file",
"command": "/usr/bin/clang++",
"args": [
"-std=c++17",
"-stdlib=libc++",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
保存以后回到自己的c++代码中,该代码是game101中homework1的代码框架(注:games101课程环境还需要正确配置eigen和opencv库,这里略去)
但是此时可以发现,编译器仍然报语法错误,第一个错误就是无法识别constexpr(该关键字是在c++11标准提出),所以我们可以得出目前clang仅仅只是c++98标准。
4.此时返回vscode的插件页面,选中已安装的插件C/C++ Clang Command Adapter,在右侧点击配置按钮(红框的齿轮),然后选择Extension Settings.
在随后打开页面中找到Clang:Cxxflags,可以看出这个参数是对c++标准的支持,点击Add item
在随后打开的参数配置中输入:-std=c++17 (注:不加任何额外符号),并点击ok
5.此时再次回到你的cpp文件中,你就可以看到原先的语法错误已经消失,编译器已经可以正确识别constexpr关键字。至此你已经可以愉快的编写c++17标准的代码啦!