有没有办法可以在linux上打印__FUNCTION__
作为一个宽字符?
任何帮助? 感谢
答案 0 :(得分:1)
7年后(尽管情况似乎相同)...
由于您提到 gcc ,请检查[GNU.GCC]: Standard Predefined Macros(重点是我的):
C99引入了__func__,而GCC长期以来一直提供__FUNCTION__。这两个都是包含当前函数名称的字符串(语义上有细微差别;请参阅GCC手册)。 它们都不是宏;预处理器不知道当前函数的名称。
由于 __ FUNCTION __ 不是宏(预处理器不“知道”任何东西),因此在(外部)宏扩展过程中它将保持不变,并在末尾L__FUNCTION__
标识符,显然是无效的。
这就是为什么 double macro 方法适用于 __ FILE __ (例如),但不适用于 __ FUNCTION __ < / em> (或 __ func __ )。
因此,您问题的简短答案是“ 否”(至少在预处理器级别为否)。您将需要“手动”转换 __ FUNCTION __ (例如,使用[man7]: MBSTOWCS(3)函数家族之一)。
注意:它可以在 VStudio 上运行,因为根据[MS.Docs]: Predefined Macros(强调仍然是我的):
- __ FUNCTION __ 定义为字符串文字,其中包含封闭函数的未修饰名称。 宏仅在函数中定义。
答案 1 :(得分:0)
可以使用宏来完成,你只需要了解宏是如何扩展的。 要获得宏的宽字符版本,您需要创建2层宏,如下所示:
#define WIDE2(x) L##x
#define WIDECHAR(x) WIDE2(x)
#define WIDE_FUNCTION WIDECHAR(__FUNCTION__)
所有重要的部分是L##x
,它在编译器看到之前将 L 字符附加到字符串常量。您也可以使用相同的技术对__FILE__
执行此操作。
答案 2 :(得分:-2)
这看起来更像是__FUNCTION__
的拼写错误,而不是widen()
或类似的问题,至少如果您粘贴了确切的错误消息。