在 VSCode 中配置默认 C/C++ 标准,存在 clangd 和 FQ 错误

问题描述 投票:0回答:1

因为我长期以来一直在与这些警告/错误作斗争。我决定问这个问题并为后来者回答自己。

扩展:vscode-clangd

  1. 'auto' type specifier is a C++11 extensionclang(-Wc++11-extensions)
    或任何“语法属于 C++11 或更高版本”错误。如何在 vscode-clangd 中设置默认 C/C++ 标准

  2. Invalid argument '-std=c99' not allowed with 'Objective-C++'
    或任何标头扩展名 .h 解释为与您的标准冲突的 C/C++。如何处理这些烦人的错误?

vscode-extensions clangd
1个回答
1
投票

解决方案

  1. 三种方式

    • 对于小型项目:写一个
      compile_flags.txt
    -std=c++11 // for C++
    -std=c99   // for C
    
    • 对于大型项目:通过 CMake 等构建系统生成
      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: 重新启动语言服务器
  2. 此问题已解决,只需将 -xc++ 添加到您的

    "clangd.arguments"
     即可
    

  3. "clangd.arguments":[ "-xc++", // <- add this for 2nd bug!!! ],
说明

clangd 首先在包含源文件的目录中检查

编译数据库

,然后进入父目录,直到找到一个。编译数据库可以是:

    名为
  1. compile_commands.json

    的文件列出了

    each
    文件的命令。通常由 CMake 等构建系统生成。

    手写
      乏味且
    • 容易出错 参见:
    • 格式和示例
  2. 名为
  3. compile_flags.txt

    的文件列出了用于

    all
    文件的标志。通常为简单项目手工编写。

    易于在小型项目中使用
  4. 如果没有找到编译数据库,请使用
  5. clangd.fallbackFlags

    
    

  6. 总结

推荐第三种解决方案,将它们添加到您的

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
    覆盖
    
        
© www.soinside.com 2019 - 2024. All rights reserved.