clang-format header 包括守卫

clang-format header include guard

我想让 clang-format 检查我的每个 headers 是否都有正确的包含防护。 例如,对于文件 dopelib/dopestuff/whatitisyo.h,我希望代码的格式如下:

#ifndef DOPELIB_DOPESTUFF_WHATITISYO_H
#define DOPELIB_DOPESTUFF_WHATITISYO_H

/** Code here. **/

#endif  // DOPELIB_DOPESTUFF_WHATITISYO_H

能否clnag-format检查此结构并确保包含保护程序存在并且使用 #ifndef 中的文件名正确命名(类似于 cpplint 所做的)?

据我所知,clang-format 目前不支持此功能。

但是,您可以使用 clang-tidy (documented here) 完全做到这一点。像这样调用它:

clang-tidy -checks='-*,llvm-header-guard' -fix-errors myIncludeFile.h

解释:

  • -* 告诉 clang-tidy 禁用所有检查
  • llvm-header-guard 告诉 clang-tidy 启用处理 include guards (documented here)
  • 的检查
  • -fix-errors 告诉 clang-tidy 修复任何由此产生的问题,即使它在解析文件时遇到其他错误

include-guards 的 llvm-header-guard 预期格式正是您上面所要求的;例如文件 mydir/myfile.h 将使用 MYDIR_MYFILE_H。我没有看到任何实际指定这是它使用的格式的文档,但我已经验证至少版本 6.0.0 确实使用该格式。

另请参阅:clang include fixer,其功能类似。

如果

,接受的解决方案可能不起作用
  • 该项目具有不同的文件结构
  • 使用了一些 clang 不理解的扩展

我这里有一个脚本:https://github.com/milasudril/texpainter/blob/master/devtools/include_guard_fix.py