【问题标题】:clang-format header include guard铿锵格式标头包括后卫
【发布时间】:2020-07-11 03:20:51
【问题描述】:

我想让clang-format 检查我的每个标题是否都有正确的包含保护。 例如,对于文件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


    【解决方案1】:

    如果出现以下情况,接受的解决方案可能不起作用

    • 项目具有不同的文件结构
    • 使用了一些clang看不懂的扩展

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

    【讨论】:

      【解决方案2】:

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

      但是,您可以使用clang-tidy (documented here) 来完成此操作。像这样调用它:

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

      解释:

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

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

      另见:clang include fixer,它做了类似的事情。

      【讨论】:

        猜你喜欢
        • 2015-01-07
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        相关资源
        最近更新 更多