Я пытаюсь скомпилировать некоторый код (используя 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 предоставляет три магические переменные, которые содержат имя текущей функции в виде строки», поэтому я не думаю, что это проблема. Есть другие идеи?
Обновление это с решением, которое я нашел.
Спасибо тем, кто сказал мне, чтобы расследовать ERR
Больше. Оказывается, было дублированное определение ERR
в другом заголовочном файле, который, кажется, вызывает мою ошибку. Изменение определения ERR
в debug.h чтобы избежать этого столкновения исправил мои проблемы. 🙂
Других решений пока нет …