C 相同#定义宏的多个定义位于所需库中

C 相同#定义宏的多个定义位于所需库中,c,compilation,compiler-warnings,c-preprocessor,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 及 我检查了每一个标题,它们都有“包含”防护装置 修复此错误的最佳方法是什么(如果没有,请使用不同的-W标志来抑制警告)?此处不包

我包含的两个库在各自的.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

我检查了每一个标题,它们都有“包含”防护装置


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

此处不包括保护或编译器标志将对您有所帮助。您大约有两种可能的解决方案:

  • 不要将两个头都包含在同一个源文件中
  • 在两个
    #include
    之间添加一个
    #undef MAX

  • 在这里,include-guard和编译器标志都不会对您有所帮助。您大约有两种可能的解决方案:

  • 不要将两个头都包含在同一个源文件中
  • 在两个
    #include
    之间添加一个
    #undef MAX

  • 这种情况唯一不好的地方是依赖于代码中的
    MAX
    ,如果有的话。如果没有,在两个
    #include
    s之间添加一个
    #undef MAX
    ,可能是最快的修复方法。如果您确实依赖于
    MAX
    ,您可能需要找出哪一个(我想这是最后一个:-),并采取适当的措施。

    这种情况唯一不好的部分是代码中对
    MAX
    的依赖,如果有的话。如果没有,在两个
    #include
    s之间添加一个
    #undef MAX
    ,可能是最快的修复方法。如果您确实依赖于
    MAX
    ,您可能需要找出哪一个(我想这是最后一个:-),并采取适当的措施。

    尼克,仅供参考,我最后通过更改源代码来解决此问题,正如AoeAoe在上面的评论中所提到的。原来httpd.h的
    MAX()
    MIN()
    宏唯一被使用的地方是在httpd.cpp中,所以我把那些
    #定义
    移到了httpd.cpp中,它们实际上应该放在第一位


    事实上,它们可能已经存在于原始的MJPG拖缆代码中,也许Robotis只是在挑选出它们想要用于达尔文框架的片段时弄坏了它。无论如何,当前的MJPG拖缆代码有
    #ifndef
    保护
    MAX
    MIN
    ,并且在一个单独的
    utils.h
    文件中,该文件只包含在
    httpd.c
    中,而不是
    httpd.h

    仅供参考,Nick,我最后通过更改源代码解决了这个问题,正如AoeAoe在上述评论中提到的。原来httpd.h的
    MAX()
    MIN()
    宏唯一被使用的地方是在httpd.cpp中,所以我把那些
    #定义
    移到了httpd.cpp中,它们实际上应该放在第一位


    事实上,它们可能已经存在于原始的MJPG拖缆代码中,也许Robotis只是在挑选出它们想要用于达尔文框架的片段时弄坏了它。无论如何,当前的MJPG拖缆代码有
    #ifndef
    保护
    MAX
    MIN
    ,并将它们放在一个单独的
    utils.h
    文件中,该文件仅包含在
    httpd.c
    中,而不是
    httpd.h
    ,第三个选项是编辑源代码(不应花费太多时间)。我还抱怨bugzilla/maillist/support。第三个选项是编辑源代码(不应该花费太多时间)。我还抱怨bugzilla/邮件列表/支持。
    .../httpd.h:43:1: warning: "MAX" redefined
    
    .../opencv2/core/types_c.h:272:1: warning: this is the location of the previous definition