自定义默认设置

你可以覆盖在c_cpp_properties.json中设置的属性的默认值。

Visual Studio Code 设置

以下 C_Cpp.default.* 设置映射到 c_cpp_properties.json 配置块中的每个属性。即:

C_Cpp.default.includePath                          : string[]
C_Cpp.default.defines                              : string[]
C_Cpp.default.compileCommands                      : string
C_Cpp.default.macFrameworkPath                     : string[]
C_Cpp.default.forcedInclude                        : string[]
C_Cpp.default.intelliSenseMode                     : string
C_Cpp.default.compilerPath                         : string
C_Cpp.default.compilerArgs                         : string[]
C_Cpp.default.configurationProvider                : string
C_Cpp.default.customConfigurationVariables         : object | null
C_Cpp.default.cStandard                            : c89 | c99 | c11 | c17
C_Cpp.default.cppStandard                          : c++98 | c++03 | c++11 | c++14 | c++17 | c++20 | c++23
C_Cpp.default.enableConfigurationSquiggles         : boolean
C_Cpp.default.mergeConfigurations                  : boolean
C_Cpp.default.systemIncludePath                    : string[]
C_Cpp.default.windowsSdkVersion                    : string
C_Cpp.default.browse.path                          : string[]
C_Cpp.default.browse.defines                       : string[]
C_Cpp.default.browse.dotConfig                     : string
C_Cpp.default.browse.databaseFilename              : string
C_Cpp.default.browse.limitSymbolsToIncludedHeaders : boolean

这些设置具有VS Code设置的所有优点,意味着它们可以有默认值、"用户"、"工作区"和"文件夹"值。因此,您可以在"用户"设置中为C_Cpp.default.cppStandard设置一个全局值,并使其适用于您打开的所有文件夹。如果任何一个文件夹需要不同的值,您可以通过添加"文件夹"或"工作区"值来覆盖该值。

VS Code 设置的这一属性允许您独立配置每个工作区 - 使 c_cpp_properties.json 文件成为可选项。

更新后的 c_cpp_properties.json 语法

一个特殊的变量已被添加到c_cpp_properties.json的接受语法中,该变量将指示扩展插入上述VS Code设置中的值。如果您将c_cpp_properties.json中的任何设置的值设置为"${default}",它将指示扩展读取该属性的VS Code默认设置并插入它。例如:

"configurations": [
    {
        "name": "Win32",
        "includePath": [
            "additional/paths",
            "${default}"
        ],
        "defines": [
            "${default}"
        ],
        "macFrameworkPath": [
            "${default}",
            "additional/paths"
        ],
        "forcedInclude": [
            "${default}",
            "additional/paths"
        ],
        "compileCommands": "${default}",
        "browse": {
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": "${default}",
            "path": [
                "${default}",
                "additional/paths"
            ]
        },
        "intelliSenseMode": "${default}",
        "cStandard": "${default}",
        "cppStandard": "${default}",
        "compilerPath": "${default}"
    }
],

请注意,对于接受字符串数组的属性,上述语法允许您使用额外的值来增强VS Code设置,从而允许您在VS Code设置中列出常见路径,并在c_cpp_properties.json中列出特定于配置的设置。

如果c_cpp_properties.json中缺少某个属性,扩展将使用VS Code设置中的值。如果开发者为给定文件夹分配了所有适用的设置值,那么c_cpp_properties.json可以从.vscode文件夹中移除,因为它将不再需要。

有关 c_cpp_properties.json 设置文件的详细信息,请参阅 c_cpp_properties.json 参考

系统包含

将添加一个新设置,允许您指定系统包含路径,与文件夹的包含路径分开。如果此设置有一个值,则扩展从compilerPath设置中指定的编译器获取的系统包含路径将不会添加到扩展用于IntelliSense的路径数组中。我们可能希望为有兴趣使用它的用户提供一个VS Code命令,以便从编译器的默认值中填充此值,以防他们希望对默认值进行一些修改。

C_Cpp.default.systemIncludePath : string[]

系统包含路径/定义解析策略

扩展确定系统includePath并以以下方式定义发送到IntelliSense引擎的内容:

  1. 如果compileCommands有一个有效的值,并且编辑器中打开的文件在数据库中,则使用数据库条目中的编译命令来确定包含路径和定义。

    • The system include path and defines are determined using the following logic (in order):
      1. If systemIncludePath has a value, use it (continue to the next step to search for system defines).
      2. If compilerPath is valid, query it.
      3. Interpret the first argument in the command as the compiler and attempt to query it.
      4. If compilerPath is "", use an empty array for system include path and defines.
      5. If compilerPath is undefined, look for a compiler on the system and query it.
  2. 如果compileCommands无效或当前文件未列在数据库中,请使用配置中的includePathdefines属性进行IntelliSense。

    • The system include path and defines are determined using the following logic (in order):
      1. If systemIncludePath has a value, use it (continue to the next step to search for system defines).
      2. If compilerPath is valid, query it.
      3. If compilerPath is "", use an empty array for system include path and defines (they are assumed to be in the includePath and defines for the current config already).
      4. If compilerPath is undefined, look for a compiler on the system and query it.

系统包含路径不应添加到includePathbrowse.path变量中。如果扩展检测到includePath属性中有任何系统包含路径,它将静默删除它们,以确保系统包含路径最后以正确的顺序添加(这对于GCC/Clang尤其重要)。

增强的语义着色

当启用IntelliSense时,Visual Studio Code的C/C++扩展支持语义着色。有关为类、函数、变量等设置颜色的更多详细信息,请参见增强着色

扩展日志记录

如果您遇到的问题我们无法根据您的问题报告中的信息进行诊断,我们可能会要求您启用日志记录并发送日志给我们。有关如何收集日志的信息,请参见C/C++扩展日志记录