找出.h文件之间的#define语句冲突

时间:2014-10-15 16:04:34

标签: c++ boost visual-studio-2013 boost-preprocessor

我在VS2013,C ++控制台应用程序中。我在将boost集成到一个大型框架时遇到了问题。如果我尝试将它们集成到空白控制台应用程序中,它们可以正常工一旦我包含框架的“root”.h文件(其中包括“很多”其他.h文件),它就会中断。这些.h文件正在“污染”增强的那些(以及之后包含的任何内容,混合结果,不,我不能只包括增强的那些,不幸的是,这并不总是一个选项)。我发现至少有一个根级别的#define干扰并导致编译错误,但我找不到导致运行时问题的其他一些冲突。

具体来说,我的问题是:如何判断.h文件定义了哪些符号?希望以后哪些是冲突的呢?我试过谷歌搜索,但找不到这样做的工具。

还是有其他一些方法可以“隔离”它们(我的问题.h文件),但仍然可以将它们正确链接到他们在其他.dll中调用的函数吗?

2 个答案:

答案 0 :(得分:1)

您可以使用g++ -E作为静态代码检查工具(无需更改工具集)。它可以告诉你什么时候重新定义但是当#define被用作另一个名字时(它无法判断它是否是真正的替换)。< / p>

如果这不是问题的根源,那么您可能需要采取更全面的方法:开始将项目的#define用法更改为其他构造,例如const和短函数。这将允许编译器通过重载或抱怨存在冲突来解决差异。

答案 1 :(得分:0)

再次包含相同的头文件可能会导致问题,您可以为每个头文件创建一个符号,这样如果该头文件已经包含在其他头文件中,则不应该包含它。

#ifndef
#define __header_file_name_H
.....some code
#endif