GCC,Unicode和__FUNCTION__

时间:2010-03-25 20:07:07

标签: c++ gcc unicode

我正在尝试让我的项目在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,但我想找到一种编译时方法来实现它。

感谢您的帮助。

1 个答案:

答案 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__,这可能是未定义的。