GCC,Unicode和__FUNCTION__

Mat*_*ský 6 c++ unicode gcc

我正在尝试使我的项目在GCC下编译(Visual Studio完美地编译它).

我有一个自定义断言函数,它抛出一个wstring消息.它的一部分是_ _FUNCTION__宏,我使用MSDN中的WIDEN宏"unicodize"

#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
Run Code Online (Sandbox Code Playgroud)

它在MSVC中编译好,但它在GCC中打印出来:

error: ‘L__FUNCTION__’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

我可以使用的唯一解决方案是使用mbstowcs在运行时将__FUNCTION __的内容转换为wstring,但我想找到一种编译时方法.

感谢帮助.

Dip*_*ick 5

在GCC中__FUNCTION__是非标准扩展.引用:GCC在线文档

在GCC 3.3和更早,在C只, __FUNCTION__并且__PRETTY_FUNCTION__被视为字符串文字; 它们可以用于初始化char数组,并且可以与其他字符串文字连接.GCC 3.4及更高版本将它们视为变量,如__func__.在C++中,__FUNCTION__ 并且__PRETTY_FUNCTION__一直都有变数.

因此,在前面添加L __FUNCTION__只是将其转换L__FUNCTION__为可能未定义的.