【问题标题】:C++: append __PRETTY_FUNCTION__ to c stringC++:将 __PRETTY_FUNCTION__ 附加到 c 字符串
【发布时间】:2018-08-08 13:09:52
【问题描述】:

我试图在编译时将__PRETTY_FUNCTION__ 附加到 c 字符串前缀。但它无法编译。而如果我用__FILE__ 来做,它就不会失败。

const char* s1= "Prefix" __FILE__;            // works
const char* s2= "Prefix" __PRETTY_FUNCTION__; // compilation error

error: expected ',' or ';' before '__PRETTY_FUNCTION__'
const char* s2 = "Prefix" __PRETTY_FUNCTION__;
                          ^~~~~~~~~~~~~~~~~~~

我正在使用 gcc 和 clang。 我错过了什么吗?

【问题讨论】:

  • 错误是什么?
  • @NathanOliver 错误:预期为 ',' 或 ';'在 'PRETTY_FUNCTION' 之前 const char* s2= "前缀" PRETTY_FUNCTION; ^~~~~~~~~~~~~~~~~~~
  • @addy:我已将您的评论粘贴到问题中,但我不得不猜测格式。请检查。 (请在问下一个问题时自己做)
  • @MSalters 谢谢

标签: c++ gcc c-preprocessor


【解决方案1】:

来自海湾合作委员会documentation for __PRETTY_FUNCTION__

[__func____PRETTY_FUNCTION__] 是变量,不是预处理器宏,不能用于初始化 char 数组或与字符串文字连接。

【讨论】:

  • 谢谢@GPhilo
【解决方案2】:

根据 C 标准的 6.10.8.1 Mandatory macros__FILE__ 是字符串文字:

__FILE__ 当前源文件的假定名称(字符串文字)。

类似的语言可以在the C++ standard16.8 预定义宏名称的第1段中找到。

6.4.2.2 Predefined identifiers, paragraph 1 of the C standard __func__ 是一个标识符:

标识符__func__应由翻译器隐式声明 好像,紧跟在每个函数的左大括号之后 定义,声明

      static const char __func__[] = "function-name";

the C++ standard states8.4.1 General 的第 8 段:

函数局部预定义变量__func__ 被定义为 形式的定义

    static const char __func__[] = "function-name";

已提供,其中 函数名 是实现定义的字符串。未指定是否这样 变量的地址不同于程序中任何其他对象的地址。

假设 GCC 扩展 __PRETTY_FUNCTION__ 实现为标准 __func__,作为实际标识符,它不能与字符串文字连接。

【讨论】:

  • 谢谢@Andrew Henle
猜你喜欢
  • 2012-11-09
  • 1970-01-01
  • 2023-01-19
  • 2022-01-21
  • 2018-07-16
  • 2015-11-29
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多