繁体   English   中英

表达式不能用作宏扩展中的函数

[英]Expression cannot be used as a function in expansion of macro

我正在尝试编译一些代码(使用GCC 4.8.2),并且遇到一个error: expression cannot be used as a function

这是相关的代码。

调试

// 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;
                ^

我试图了解为什么会发生错误。 看着这个问题,我认为问题可能是由于宏中的__FUNCTION__而将函数(HLSL ...)用作变量。 但是根据GCC文档 :“ GCC提供了三个魔术变量,它们以字符串形式保存了当前函数的名称”,所以我不认为这是问题所在。 还有其他想法吗?

用我发现的解决方案更新它。

感谢以上那些告诉我进一步研究ERR 事实证明,另一个头文件中有一个重复的ERR定义,这似乎一直在导致我的错误。 更改debug.h中的ERR的定义以避免发生此冲突,从而解决了我的问题。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM