内联方式禁用铿锵的检查

Ric*_*h L 17 c++ clang++ clang-tidy

我正试图为一个项目设置铿锵声.我希望能够提供干净的输出,并鼓励尽可能使用-fix模式.但是,在某些情况下需要例外.

很有可能使用

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-id-macro"
// Code that is being specially exempted
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

对于想要在本地禁用编译器警告的等效情况,是否可以通过clang-tidy执行类似的操作?

我试过了

#pragma clang diagnostic push
#pragma clang diagnostic ignored "readability-identifier-naming"
// Code that is being specially exempted
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

并且还clang替换为clang-tidy.不幸的是,当clang用作pragma目标并使用常规clang进行编译时,我得到了编译警告

warning: pragma diagnostic expected option name (e.g. "-Wundef") [-Wunknown-pragmas]
Run Code Online (Sandbox Code Playgroud)

warning: unknown pragma ignored [clang-diagnostic-unknown-pragmas]
Run Code Online (Sandbox Code Playgroud)

编译时,如果我用来clang-tidy代替clang.clang-tidy在源上运行时,都不会对自身的输出产生影响.

这与x86_64 Linux上的3.8 clangclang-tidy.

Nia*_*las 24

只需添加一个注释,其中包含您希望clang-tidy忽略的行上任何位置的字符串NOLINT.例如:

badcode;  // NOLINT

// NOLINTNEXTLINE
badcode;

badcode; // NOLINT(cert-err-58-cpp)
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档.

  • 事实上,现在似乎在 // NOLINT 之后通过(将它们放在括号中)选择退出特定检查现在是 2017 年 12 月左右添加的一项功能。 (3认同)
  • 为@ RichL的良好提示提供一个例子:`badcode; // NOLINT(cert-err58-cpp)`.这将仅禁用"cert-err58-cpp"警告,并且仅针对此单行(例如,仍然可以抛出"cert-err111-cpp").确保NOLINT和(.)之间没有空白区域. (3认同)

小智 17

从LLVM 14.0.0开始,您还可以使用:

// NOLINTBEGIN(cert-err58-cpp)
multiple lines of code;
// NOLINTEND(cert-err58-cpp)
Run Code Online (Sandbox Code Playgroud)