在clang tidy中,检查[llvm-header-guard]寻找LLVM风格的头文件保护,但我找不到任何正确的LLVM头文件保护样例,特别是给定宏定义名称的结构,coding standards页面没有提及任何内容。
看一下单元测试:
从中可以看出,它似乎接受了一些常用模式的变化。对于名为include/llvm/ADT/foo.h
的文件,惯例似乎是:
#ifndef LLVM_ADT_FOO_H
#define LLVM_ADT_FOO_H
//...
#endif // LLVM_ADT_FOO_H
EndOfMainFile
宏检查循环来了解一些逻辑。它会解析头文件保护,然后自动生成一个守卫并检查它们是否相同。如果不同,将发出警告。 - paddyLLVM检测并满意您的头文件的正确方式是获取用于包含头文件的路径,将其转换为大写字母,将目录分隔符替换为下划线,并将文件扩展名中的句点替换为下划线。
例如,如果您使用#include <dopelib/dopestuff/whatitisyo.h>
,则您的头文件应为:
#ifndef DOPELIB_DOPESTUFF_WHATITISYO_H
#define DOPELIB_DOPESTUFF_WHATITISYO_H
/** Your code here. **/
#endif
https://github.com/llvm-mirror/llvm/blob/master/include/llvm/CodeGen/SelectionDAG.h
https://github.com/llvm-mirror/llvm/blob/master/include/llvm/Support/AlignOf.h
根据那些文件,我认为头文件保护看起来像这样:#ifndef LLVM_CODEGEN_SELECTIONDAG_H
#define LLVM_CODEGEN_SELECTIONDAG_H
...
#endif
llvm-header-guard
将修复不遵守规则的问题,所以您是否已经运行它并查看了结果?您还可以检查现有的LLVM头文件,以了解它们的样子。 - JABllvm-header-guard
要求我在保护标签之前加上下划线,它建议使用类似_HOME_USER_PRJ_DETAIL_FILENAME_HPP
的东西。而其他整洁规则告诉我不要这样做(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp
),所以我必须禁用llvm-header-guard
。 - alfC