我正在尝试让我的项目在GCC下编译(Visual Studio可以完美地编译它)。
我有一个自定义断言函数,它会抛出一个wstring消息。它的一部分是_ _FUNCTION__宏,我使用MSDN中的WIDEN宏“unicodize”
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
它在MSVC中编译好,但它在GCC中打印出来:
error: ‘L__FUNCTION__’ was not declared in this scope
我可以使用的唯一解决方案是使用mbstowcs在运行时将__FUNCTION __的内容转换为wstring,但我想找到一种编译时方法来实现它。
感谢您的帮助。
答案 0 :(得分:5)
在GCC中__FUNCTION__
是非标准扩展名。引用:GCC Online Docs
在GCC 3.3及更早版本中,仅限C,
__FUNCTION__
和__PRETTY_FUNCTION__
被视为字符串文字;他们 可用于初始化char 数组,它们可以连接起来 与其他字符串文字。 GCC 3.4 然后将它们视为变量, 比如__func__
。在C ++中,__FUNCTION__
而__PRETTY_FUNCTION__
总是如此 是变数。
因此,在__FUNCTION__
的正面添加L只会将其转换为L__FUNCTION__
,这可能是未定义的。