确保每个标题在大项目中使用唯一的包含警戒

时间:2017-01-23 02:33:18

标签: c++ visual-studio-2015 include-guards

在一个不那么小的项目(> 100 .h)中,我想确保每个.h使用不同的包含警戒(#ifndef XXX)。

每当我违反它时,我都希望尽快得到通知。

情况

这是我正在使用的惯例(半自动生成,VS2015): -

foo.h中

#ifndef Foo_h__
#define Foo_h__
//....... some long code .........
#endif //Foo_h__

有时候(每1-4周一次),在我创建新文件,复制粘贴源或重构(重命名)之后,我对包含警卫犯了一些错误。结果: -

  • 包含警卫不再与文件名匹配。
  • 包含警卫恰好与另一个标题中的另一个包含警卫相同。

问题

如何预防和治疗包括警卫的重复?

我的解决方案

解决方案1: -

#pragma once

缺点:这是compiler specific。我不希望我的代码依赖于编译器。

解决方案2: -

(编辑,感谢 Benjamin Lindley Beta 。)

我可以编写自动代码生成脚本。 这是a possible standard: -

<project>_<path_part1>_..._<path_partN>_<file>_<extension>_INCLUDED

缺点:需要外部脚本。

1 个答案:

答案 0 :(得分:0)

由于#pragma once不能完全移植,我的建议是在构建此简单的bash脚本之前运行程序:

find . -name '*.h' -o -name '*.hpp' | xargs -n1 -d '\n' grep "#ifndef .*_H.*" | sort | uniq -cd

它最终显示有多少文件使用相同的包含保护,而确切的包含保护会重复出现。