因为我长期以来一直在与这些警告/错误作斗争。我决定问这个问题并为后来者回答自己。
'auto' type specifier is a C++11 extensionclang(-Wc++11-extensions)
或任何“语法属于 C++11 或更高版本”错误。如何在 vscode-clangd 中设置默认 C/C++ 标准?
Invalid argument '-std=c99' not allowed with 'Objective-C++'
或任何标头扩展名 .h 解释为与您的标准冲突的 C/C++。如何处理这些烦人的错误?
三种方式
compile_flags.txt
:-std=c++11 // for C++
-std=c99 // for C
complie_commands.json
,可以通过将其添加到 CMakeLists.txt 文件来启用:set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
如果没有找到编译数据库(
compile_flags.txt
/complie_commands.json
),你可以在你的vscode中执行此操作:
cmd/ctrl + shift + p
:首选项:打开用户设置(JSON)settings.json
文件中:"clangd.fallbackFlags": [
"-std=c++11",
"-std=c99" // in case you need to write C
],
"clangd.arguments":[
"-xc++", // <- add this for 2nd bug!!!
],
cmd/ctrl + shift + p
: clangd: 重新启动语言服务器此问题已解决,只需将 -xc++
添加到您的
"clangd.arguments"
即可
"clangd.arguments":[
"-xc++", // <- add this for 2nd bug!!!
],
说明
compile_commands.json
的文件列出了
each文件的命令。通常由 CMake 等构建系统生成。 手写
compile_flags.txt
的文件列出了用于
all文件的标志。通常为简单项目手工编写。 易于在小型项目中使用
clangd.fallbackFlags
。
settings.json
:
"clangd.fallbackFlags": [
"-std=c++11",
"-std=c99" // in case you need to write C
],
"clangd.arguments":[
"-xc++", // <- add this for 2nd bug!!!
],
您不再需要为每个小演示编写compile_flags.txt
如果您愿意,可以被您的
compile_flags.txt
complie_commands.json
覆盖