所需库中相同#define宏的多个定义

时间:2012-03-16 00:34:46

标签: c compilation compiler-warnings c-preprocessor

我所包含的两个库在各自的.h文件中共享相同的宏定义。

#define MAX <some value>       //first definition of MAX in a file
#define MAX <some other value> //second definition of MAX in a *different* file

在汇编中我得到了

.../httpd.h:43:1: warning: "MAX" redefined

.../opencv2/core/types_c.h:272:1: warning: this is the location of the previous definition

我已经检查了每个标题,并且他们有#include警卫。

修复此错误的最佳方法是什么(如果失败,请使用不同的-W标志来抑制警告)?

3 个答案:

答案 0 :(得分:2)

关于这种情况的唯一不好的部分是代码中MAX的依赖性,如果有的话。如果您没有,则在两个#undef MAX之间添加#include可能是最快的修复。如果你依赖于MAX,你可能需要找出哪一个(我猜它是最后一个:-)并做一些合适的事情。

答案 1 :(得分:2)

仅供参考,尼克,我最后通过更改来源来解决这个问题,正如AoeAoe在上面的评论中提到的那样。事实证明,httpd.h的MAX()MIN()宏使用的唯一地方是在httpd.cpp中,所以我只是将那些#defines移到了httpd.cpp中,它们本应该在那里首先。

事实上,他们可能已经使用了原始的MJPG-Streamer代码,也许当他们挑选出他们想要用于Darwin框架的部分时,Robotis可能会破坏它。无论如何,当前的MJPG-Streamer代码在#ifndefMAX周围有MIN个守卫,并且还将它们放在一个单独的utils.h文件here中包含在httpd.chere中,而不是httpd.h

答案 2 :(得分:1)

既不包括警卫也不包含编译器标志会对你有所帮助。您有大约两种可能的解决方案:

  1. 不要将#include两个标头放入同一个源文件中。
  2. 在两个#undef MAX之间添加#include