【发布时间】:2015-05-15 08:51:10
【问题描述】:
当前状态
在 gcc bugtracker 中提交的错误(包括简单的测试用例):https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66234
我目前正在将一些代码移植到新平台和工具链,其中包括从 gcc 4.7.2 升级到 gcc 4.9.2(或者更具体地说,从 OSELAS toolchains 的 2012 版升级到 2014 版 - 我已经还使用 gcc 4.6.4(有效)和 gcc 4.8.3(无效)重现了我的主机上的行为。
在构建应用程序的过程中,我使用了一些#pragma message 语句来输出构建日期和主机名(注意BUILDTAG 和BUILDHOST 也被存储为常量供应用程序使用):
#define BUILDTAG (__DATE__ " " __TIME__)
#define BUILDHOST BUILT_ON
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#pragma message "Setting builddate to: " STR(BUILDTAG)
#pragma message "Building on: " STR(BUILDHOST)
旧工具链 (gcc 4.7.2 / 4.6.4) 输出以下内容,这正是我想要的:
note: #pragma message: Setting builddate to: ("May 15 2015" " " 10:35:12")
note: #pragma message: Building on: my-host
但是,新的工具链(gcc 4.9.2 / 4.8.3)给了我:
note: #pragma message: Setting builddate to: ("May 15 2015" " " "10:39:35")
#pragma message "Setting builddate to: " STR(BUILDTAG)
^
note: in definition of macro 'STR_HELPER'
#define STR_HELPER(x) #x
^
note: in expansion of macro 'STR'
#pragma message "Setting builddate to: " STR(BUILDTAG)
^
note: #pragma message: Building on: my-host
#pragma message "Building on: " STR(BUILDHOST)
^
note: in definition of macro 'STR_HELPER'
#define STR_HELPER(x) #x
^
note: in expansion of macro 'STR'
#pragma message "Building on: " STR(BUILDHOST)
^
(请注意,我已从两个列表的输出中删除了文件路径/位置。)
当然,我想要的输出就在那里,但还有很多额外的东西。是否有隐藏额外的in definition of macro/in expansion of macro/等消息,同时保持所需的输出?
或者我只是做错了,有没有更好的方法来打印消息?
【问题讨论】:
标签: gcc c-preprocessor pragma