使用libclang(libtooling),我如何启用和禁用特定的警告
With libclang (libtooling), how can I enable and disable specific warnings?
我正在尝试使用libclang API以编程方式分析C++项目。我的clang编译很好,我的工具正确地解析了生成的AST,但我不知道如何打开/关闭特定的警告。
这是相关的代码片段,我想启用/禁用"未使用的变量"警告:
clang::DiagnosticOptions mDiagnosticOptions;
mDiagnosticOptions.ShowOptionNames = 1; // prints warning, ie [-Wextra-tokens]
mDiagnosticOptions.Warnings.push_back("unused-variable"); // <----- DOESN'T WORK
// use mDiagnosticOptions further down for compile steps etc.
.
.
.
您的代码片段不是libclang API(clang-c/Index.h
(的一部分。如果你使用libclang,那么你可以通过调用来获得一个翻译单元
CXTranslationUnit clang_parseTranslationUnit(
CXIndex CIdx,
const char *source_filename,
const char * const *command_line_args,
int num_command_line_args,
struct CXUnsavedFile *unsaved_files,
unsigned num_unsaved_files,
unsigned options);
您可以通过command_line_args
参数禁用警告,例如
const char* const command_line_args[] = { "-Wall", "-Wno-unused-variable" };
我认为这里的问题在于;对编译步骤等使用mDiagnosticOptions;代码的一部分。特别是,如果使用ASTUnit
的LoadFromCommandLine
方法,则必须传递一个包含DiagnosticOptions
的DiagnosticsEngine
,因此似乎应该天真地将该DiagnosticOptions
配置为选择要启用的警告。
但是,LoadFromCommandLine
解析其命令行,这样做将覆盖DiagnosticOptions
中的一些信息,例如其Warnings
和IgnoreAllWarnings
字段。(但它不会覆盖ShowOptionNames
;幸存内容的细节没有记录下来,可能是由解析器的编写方式引起的。(
因此,您必须使用命令行语法启用和禁用警告:
commandLine.push_back("-Wunused-variable"); // enable one warning
commandLine.push_back("-Wno-unused-variable"); // disable one warning
commandLine.push_back("-w"); // disable all warnings
在通过CCD_ 13到CCD_。
相关文章:
- 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告
- 在 GCC 中启用"differing levels of indirection"警告/错误
- 视觉 std::矢量无异常:警告 C4530:使用了C++异常处理程序,但未启用展开语义.指定 /EHsc
- 为什么我应该始终启用编译器警告
- gcc8.2如何启用警告:数组下标在数组范围之上[-warray-bounds]
- 如何使用布尔参数为按位运算符启用C++警告
- 我可以启用有关我自己的变异功能错误使用的指定符的警告
- 即使启用了 Wextra,gcc 也不会给出将无符号整数< 0 进行比较的警告
- 为什么 g++ 不发出这个与构造函数相关的 noexcept 启用"-fpic"的警告?
- 如何忽略 [默认启用] 的特定 gcc 警告?
- 如何在gcc或clang中启用从int到int64_t的转换警告
- G++ 警告:#include 指令末尾的额外标记 [默认启用]
- 在 catch 块中使用 g++ 或 clang++ 启用未引用的局部变量警告
- 在g++中启用严格混叠警告
- 使用自身初始化成员变量时启用编译器警告
- 如何在Visual Studio中启用特定的c++警告
- 如何在代码块中关闭带有[默认启用]标记的编译器警告?
- 警告:非静态数据成员初始化器只能使用-std=c++11或-std=gnu++11[默认启用]
- 如何在CLion中启用所有编译器警告
- 如何在MSVC中为传递给变分函数的非POD参数启用警告/错误