检查何时同时包含两个标题

时间:2010-05-14 10:42:35

标签: c include dependencies c-preprocessor

我需要根据在不同头文件中声明的两个相关的宏预处理器#define做一个断言...代码库很大,如果我能找到一个把断言置于何处的地方会很好已经包含了两个标头,以避免不必要地污染名称空间。

只检查文件是否明确包含两者都可能不够,因为它们中的一个(或两个)可能包含在嵌套包含层次结构的上层。

我知道编写一个脚本来检查它并不会太难,但是如果已经有一个工具可以完成这项工作,那就更好了。

示例:

file foo.h

#define FOO 0xf

file bar.h

#define BAR 0x1e

我需要把放在某处(这里并不重要)这样的事情:

#if (2*FOO) != BAR
    #error "foo is not twice bar"
#endif

是的,我知道这个例子是愚蠢的,因为它们可以被替换,所以一个来自另一个,但是我们说包含可以从不受我控制的不同地方生成,我只需要检查它们是否匹配在编译时...我不想只添加一个包含在另一个之后,因为它可能与我之前没有编写的代码冲突,所以这就是为什么我想找到一个两个都已存在的文件

简而言之:我如何找到包含(直接或间接)其他两个文件的文件?

3 个答案:

答案 0 :(得分:1)

由于您的两个包含可能都受#define警卫保护,如果基于#ifdef THE_OTHER_GUARD_NAME包含另一个头文件,您可以检入这两个头文件中的每一个,并发出警告(或错误,无论你哪个如果你发现它已被包括在内。

答案 1 :(得分:1)

如果您使用的是Unix或类似Unix的系统,则可以使用名为makedepend的实用程序。

http://en.wikipedia.org/wiki/Makedepend

如果您使用的是Windows,那么可以使用名为makedep的Sourceforge项目。

答案 2 :(得分:-2)

#pragma once运营商怎么样?之后,您可能会忘记担心多个头文件定义......