我有一个实例化全局变量的宏。因此,clang-tidy将正确地发出“静态存储持续时间...的初始化可能会引发无法捕获的异常”。
我可以逐个禁用此警告吗?在定义宏的位置最好使用内联。
也就是说,我有:
// header.h
#define UGLY_MACRO(X) SomeClass X(#X)
// source.cpp
UGLY_MACRO(SomeName); // clang-tidy complains here
我希望clang-tidy不再抱怨此事。
我想尽可能具体。 我只想对 this 宏发出 this 警告。我不想在全球范围内发出警告,因此有人可能会在未注意到的情况下将更多此类宏添加到代码中。 另外,我不想在每个使用宏的地方添加一些东西(例如// NOLNT(...)),这太麻烦了。
还是我从错误的方向来处理这个问题?在可能的情况下,我曾经与pc-lint合作。
答案 0 :(得分:1)
据我所知这是不可能的。有问题的支票(cert-err58-cpp)没有可配置的选项,这意味着不能逐个宏禁用它,而只能全局禁用。
保存用于修改支票来源的唯一选项是\\NOLINT(cert-err58-cpp)
和\\NOLINTNEXTLINE(cert-err58-cpp)
。后者在文本搜索和替换时更容易使用,因为您只需要捕获换行符并紧跟宏名称即可。
答案 1 :(得分:0)
我有同样的问题。可悲的是,我发现了两种方法,但没有一种是完美的。
通过对--line-filter
使用clang-tidy
命令行参数来选项1 :
clang-tidy --line-filter='["name":"header.h"]' source.cpp
注意:
--filter-regex
不同,这甚至可以用于宏扩展。header.h
中指定要为其禁用警告的行号范围(请参见--line-filter
的帮助文本)选项2 ,方法是包装宏:
#define UGLY_MACRO_NOLINT(...) UGLY_MACRO(__VA_ARGS__) //NOLINT(...)
注意:
UGLY_MACRO
是多行,则不起作用