Glm VECTORIZE2_VEC переопределил предупреждение XCode

Я продолжаю получать предупреждения только в XCode о переопределении некоторых макросов в glm. это не большая проблема, но меня раздражают предупреждения.

Если я поставлю блок #ifndef поверх макросов виновника, но тогда вся система не будет работать? Я включаю их в статическую библиотеку, которая связана с приложением, которое также включает их. Я думал, что это может быть проблемой, поэтому я удалил его из одного из двух, чтобы посмотреть, помогло ли это. Это не так.

Это предупреждение не появляется при использовании mingw g ++ в Windows, но оно появляется в Xcode 4. Я использую glm версии 0.9.3.4.

Предупреждения:

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

Это повторяется сотни раз.

Код Culprit (взят из файла 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

Решение

Основываясь на комментариях выше, кажется, что у вас есть 3 варианта:

  1. Просто жить с предупреждениями компиляции

  2. Измените расположение вашего макроопределения VECTORIZE2_VEC относительно # include, так как другое определение VECTORIZE2_VEC не заключило его в #ifndef (и это вызывает предупреждение компиляции)

  3. Подумайте, действительно ли вам нужно # определить это снова, учитывая, что оно уже определено.

Вариант 1 приемлем, но если у вас есть требование «нет предупреждения о компиляции», что на самом деле хорошо, то вам придется использовать вариант 2 (который, на мой взгляд, может стать сложным для поддержки) или 3.

Для реализации варианта 2 вам необходимо определить макрос после включить, где он изначально определен, но до другие # включают, которые нуждаются в этом. Это может оказаться невозможным, если вы получите исходное определение и ошибку компиляции, включив всего один файл, в этом случае вам не повезло.

Предполагая, что file1.h имеет исходное определение VECTORIZE2_VEC, а file2.h нуждается в определении и вызывает ошибку компиляции при его отсутствии, следующее может решить проблему и избавиться от ошибок и предупреждений:

#include <file1.h>

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

#include <file2.h>

// ...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]