Выражение не может использоваться как функция в расширении макроса

Я пытаюсь скомпилировать некоторый код (используя GCC 4.8.2) и получаю error: expression cannot be used as a function,

Вот соответствующий код.

debug.h

// A macro for code which is not expected to be reached under valid assumptions
#if !defined(NDEBUG)
#define UNREACHABLE() do { \
ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__); \
assert(false); \
} while(0)
#else
#define UNREACHABLE() ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__)
#endif

someFile.cpp (действительно важна только строка по умолчанию)

HLSLBlockEncoder::HLSLBlockEncoderStrategy HLSLBlockEncoder::GetStrategyFor(ShShaderOutput outputType)
{
switch (outputType)
{
case SH_HLSL9_OUTPUT: return ENCODE_LOOSE;
case SH_HLSL11_OUTPUT: return ENCODE_PACKED;
default: UNREACHABLE(); return ENCODE_PACKED;
}
}

Ошибка:

/.../debug.h:123:90: error: expression cannot be used as a function
#define UNREACHABLE() ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__)
^
/.../someFile.cpp:217:16: note: in expansion of macro 'UNREACHABLE'
default: UNREACHABLE(); return ENCODE_PACKED;
^

Я пытаюсь понять, почему происходит ошибка. Смотря на этот вопрос Я подумал, что, возможно, проблема в том, что функция (HLSL …) использовалась в качестве переменной из-за __FUNCTION__ в макросе. Но согласно документация GCC: «GCC предоставляет три магические переменные, которые содержат имя текущей функции в виде строки», поэтому я не думаю, что это проблема. Есть другие идеи?

0

Решение

Обновление это с решением, которое я нашел.

Спасибо тем, кто сказал мне, чтобы расследовать ERR Больше. Оказывается, было дублированное определение ERR в другом заголовочном файле, который, кажется, вызывает мою ошибку. Изменение определения ERR в debug.h чтобы избежать этого столкновения исправил мои проблемы. 🙂

0

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

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

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