Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找出什么#定义.h文件之间的语句冲突 我在VS2013,C++控制台应用程序。我在将boost集成到大型框架中时遇到问题。如果我尝试将它们集成到一个空白的控制台应用程序中,它们工作得很好。一旦我包含了框架的“root”.h文件(其中包括“许多”其他.h文件),它就会崩溃。这些.h文件正在“污染”boost文件(以及之后包含的任何文件,结果好坏参半,不,我不能先包含boost文件,不幸的是,这并不总是一个选项)。我发现至少有一个根级别#define干扰并导致编译错误,但我找不到导致运行时问题的其他冲突_C++_Boost_Visual Studio 2013_Boost Preprocessor - Fatal编程技术网

找出什么#定义.h文件之间的语句冲突 我在VS2013,C++控制台应用程序。我在将boost集成到大型框架中时遇到问题。如果我尝试将它们集成到一个空白的控制台应用程序中,它们工作得很好。一旦我包含了框架的“root”.h文件(其中包括“许多”其他.h文件),它就会崩溃。这些.h文件正在“污染”boost文件(以及之后包含的任何文件,结果好坏参半,不,我不能先包含boost文件,不幸的是,这并不总是一个选项)。我发现至少有一个根级别#define干扰并导致编译错误,但我找不到导致运行时问题的其他冲突

找出什么#定义.h文件之间的语句冲突 我在VS2013,C++控制台应用程序。我在将boost集成到大型框架中时遇到问题。如果我尝试将它们集成到一个空白的控制台应用程序中,它们工作得很好。一旦我包含了框架的“root”.h文件(其中包括“许多”其他.h文件),它就会崩溃。这些.h文件正在“污染”boost文件(以及之后包含的任何文件,结果好坏参半,不,我不能先包含boost文件,不幸的是,这并不总是一个选项)。我发现至少有一个根级别#define干扰并导致编译错误,但我找不到导致运行时问题的其他冲突,c++,boost,visual-studio-2013,boost-preprocessor,C++,Boost,Visual Studio 2013,Boost Preprocessor,具体来说,我的问题是:如何判断.h文件定义了哪些符号?希望以后会有哪些冲突?我试着用谷歌搜索,但找不到一个工具 或者是否有其他方法可以“隔离”它们(我的问题.h文件),但仍然让它们正确链接到它们在其他.dll中调用的函数?再次包含相同的头文件可能会导致问题,您可以为每个头文件创建一个符号,这样,如果该头文件已包含在其他头文件中,则不应包含该头文件 #ifndef #define __header_file_name_H .....some code #endif 您可以使用g++-E作为静态代

具体来说,我的问题是:如何判断.h文件定义了哪些符号?希望以后会有哪些冲突?我试着用谷歌搜索,但找不到一个工具


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

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

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

您可以使用
g++-E
作为静态代码检查工具(无需更改工具集)。它可以告诉您什么时候重新定义了某个内容,但不能告诉您什么时候将
#define
用作另一个名称(它无法判断它是否是真正的替换)


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

可能有一些静态代码分析工具(如PVS Studio)可以帮助您。但我不确定。预编译头的生成会提供这些信息吗?不确定在这种情况下.pch文件的格式是什么,但是如果它是基于文本的,那么您可以在output@PetrPervukhin-是的,我是这么想的,但我从未使用过这样的工具,我希望得到更具体的建议,和/或如何配置这样的工具以获得输出。正如我在第一行中所说的,使用VisualStudio。切换到gcc不是可选的(这是为了工作)。我在这里最初使用的是一个“不小”的框架,因此切换东西需要数千行(如果不是1000行的话)的工作。@Kevin Anderson我更新了我的答案,但我只是说使用g++作为静态代码检查工具(仅限预编译),而不是更改工具链。