Glm VECTORIZE2_VEC重新定义了XCode警告

时间:2012-10-08 16:56:13

标签: c++ xcode glm-math

我一直只在XCode中收到有关重新定义的glm中某些宏的警告。这不是一个大问题,但我发现警告很烦人。

如果我将#ifndef块放在罪魁祸首的宏上,那么整个系统都不会工作?我将它们包含在一个静态库中,该库链接到一个也包含它们的应用程序。我虽然这可能是问题,所以我从两个中的一个中删除它,看它是否有帮助。它没有。

在Windows上使用mingw g ++但在Xcode 4中使用mingw g ++时不会出现此警告。我使用的是glm版本0.9.3.4。

警告:

"VECTORIZE2_VEC" redefined
This is the location of the previous definition

重复数百次。

罪魁祸首代码(取自glm文件_vectorize.hpp):

#define VECTORIZE2_VEC(func) \
template <typename T> \
GLM_FUNC_QUALIFIER detail::tvec2<T> func( \
    detail::tvec2<T> const & v) \
{ \
    return detail::tvec2<T>( \
        func(v.x), \
        func(v.y)); \
}

还有一些非常类似于此的宏。

1 个答案:

答案 0 :(得分:1)

根据上述评论,您似乎有3个选项:

  1. 接受编辑警告

  2. 更改VECTORIZE2_VEC宏定义相对于#include的位置,因为VECTORIZE2_VEC的其他定义未将其包装在#ifndef中(这导致编译警告)

  3. 考虑到它已经定义,考虑一下你是否真的需要#define它。

  4. 选项1没问题,但如果您有“无编译警告”要求,这实际上是一件好事,那么您将不得不选择选项2(在我看来可能难以维护)或3

    要实施选项2,您需要在最初定义的包含 之后定义宏 ,但在之前 其他需要它的#include。这可能是不可能的,如果你通过#including一个文件获得原始定义和编译错误,在这种情况下你运气不好。

    假设file1.h具有原始的VECTORIZE2_VEC定义,并且file2.h需要定义并在缺少时导致编译错误,以下内容可以解决问题并且是错误和警告:

    #include <file1.h>
    
    #ifdef VECTORIZE2_VEC 
      #undef VECTORIZE2_VEC 
    #endif
    #define VECTORIZE2_VEC(func) ....
    
    #include <file2.h>
    
    // ...