我一直只在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)); \
}
还有一些非常类似于此的宏。
答案 0 :(得分:1)
根据上述评论,您似乎有3个选项:
接受编辑警告
更改VECTORIZE2_VEC宏定义相对于#include的位置,因为VECTORIZE2_VEC的其他定义未将其包装在#ifndef中(这导致编译警告)
考虑到它已经定义,考虑一下你是否真的需要#define它。
选项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>
// ...