c++ - Glm VECTORIZE2_VEC 重新定义 XCode 警告

标签 c++ xcode glm-math

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

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

在 Windows 上使用 mingw g++ 时不会出现此警告,但在 Xcode 4 中会出现。我使用的是 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)); \
}

还有一些其他的宏与这个非常相似。

最佳答案

根据上面的评论,您似乎有 3 个选择:

  1. 接受编译警告

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

    <
  3. 考虑到它已经定义,考虑是否真的需要再次#define。

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

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

假设 file1.h 具有原始的 VECTORIZE2_VEC 定义,而 file2.h 需要该定义并在其缺失时导致编译错误,以下可以解决该问题并且不会出现错误和警告:

#include <file1.h>

#ifdef VECTORIZE2_VEC 
  #undef VECTORIZE2_VEC 
#endif
#define VECTORIZE2_VEC(func) ....

#include <file2.h>

// ...

关于c++ - Glm VECTORIZE2_VEC 重新定义 XCode 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12786070/

相关文章:

c++ - 将 char 数组转换为字符串时的数据丢失

加入时线程的 C++ vector 随机崩溃

ios - 应用程序因 AVAudioSession privateBeginInterruption 而崩溃

ios - Swift:尝试更改从另一个 swift 文件调用的函数中的对象属性时意外发现 "nil"

ios - Xcode渲染不同的颜色

c++ - 在 Mac OS X 上使用 CUDA 5.5 时出现内核失败错误

c++ - 如何构造带有嵌入值的 std::string ,即 "string interpolation"?

c++ - 关于 View 矩阵和视锥剔除

c++ - 麦片序列化错误

C++ 认为 '<<' 不是类的成员,但它是