确保每个标头在大型项目中使用唯一的包含保护
Make sure every header uses unique include guards in big project
在一个不太小的项目(>100.h
)中,我想确保每个.h
使用不同的包含保护(#ifndef XXX
)。
每当我违反它时,我都希望尽快得到通知。
情况
以下是我使用的约定(半自动生成,VS2015):-
Foo.h
#ifndef Foo_h__
#define Foo_h__
//....... some long code .........
#endif //Foo_h__
有时(每1-4周一次),在我创建新文件、复制和粘贴源代码或广泛重构(重命名)后,我会在include保护方面犯一些错误。结果:-
- Include guard与文件名不再匹配
- Include保护恰好与另一个标头中的另一个包含保护相同
问题
如何预防和治疗包含保护的重复?
我糟糕的解决方案
解决方案1:-
#pragma once
缺点:它是特定于编译器的。我不希望我的代码依赖于编译器。
解决方案2:-
(已编辑,感谢Benjamin Lindley和Beta。)
我可以编写一个自动代码生成脚本。这是一个可能的标准:-
<project>_<path_part1>_..._<path_partN>_<file>_<extension>_INCLUDED
缺点:它需要一个外部脚本。
由于#pragma once
不是完全可移植的,我的建议是在构建过程之前运行这个简单的bash脚本:
find . -name '*.h' -o -name '*.hpp' | xargs -n1 -d 'n' grep "#ifndef .*_H.*" | sort | uniq -cd
它最终显示了有多少文件使用相同的include保护,以及错误重复的确切include保护。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 为什么在保护模式下继承升级不起作用
- 计算排序向量的向量中唯一值的计数
- 访问被拒绝后,c++中的故障保护代码
- C++:无法访问声明的受保护成员
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 为什么您需要C++头文件的包含保护
- lock_guard是否保护返回值
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- c++多进程编写一个唯一的文件
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 如何更改唯一指针向量的可见性
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 继承和友元函数,从基类访问受保护的成员
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 确保每个标头在大型项目中使用唯一的包含保护