有没有办法可以__FUNCTION__
在 linux 上打印为宽字符?
WIDEN 的技巧对我不起作用,gcc 编译器打印:错误:?L_ FUNCTION _?在这方面没有申明
有什么帮助吗?谢谢
有没有办法可以__FUNCTION__
在 linux 上打印为宽字符?
WIDEN 的技巧对我不起作用,gcc 编译器打印:错误:?L_ FUNCTION _?在这方面没有申明
有什么帮助吗?谢谢
7 年多后(虽然事情似乎是一样的)......
既然您提到了gcc,请检查[GNU.GCC]: Standard Predefined Macros(重点是我的):
C99引入了__func__,GCC提供了很长时间的__FUNCTION__。这两个都是包含当前函数名称的字符串(存在细微的语义差异;请参阅 GCC 手册)。它们都不是宏;预处理器不知道当前函数的名称。
由于__FUNCTION__不是宏(预处理器对它一无所知),它在(外部)宏扩展期间将保持不变,最后生成L__FUNCTION__
标识符,这显然是无效的。
这就是为什么双宏方法适用于__FILE__(例如),但不适用于__FUNCTION__(或__func__)。
因此,对您的问题的简短回答是“否”(至少不是在预处理器级别)。您将需要“手动”转换__FUNCTION__ (例如,使用[man7]: MBSTOWCS(3)函数系列之一)。
注意:它适用于VStudio,因为根据[MS.Docs]: Predefined Macros(重点仍然是我的):
- __FUNCTION__定义为包含封闭函数的未修饰名称的字符串文字。宏仅在函数内定义。
它可以使用宏来完成,您只需要了解宏是如何扩展的。要获得宏的宽字符版本,您需要创建 2 层宏,如下所示:
#define WIDE2(x) L##x
#define WIDECHAR(x) WIDE2(x)
#define WIDE_FUNCTION WIDECHAR(__FUNCTION__)
最重要的部分是在编译器看到它之前将LL##x
字符附加到字符串常量。您也可以使用相同的技术来做到这一点。__FILE__
至少如果您粘贴了确切的错误消息,这看起来更像是一个错字而__FUNCTION__
不是问题或类似问题。widen()