C ++中PRIu64的奇怪编译器行为

时间:2018-10-09 07:12:21

标签: c++ g++

我的c ++文件中有一些代码如下:

#include <cinttypes>
....
LOG_INFO("%s duration: %" PRId64 "\n", tag.c_str(), timestamp);

它可以使用标志-std=c++11成功编译。

但是它无法在另一台机器上编译并出现以下错误:

base/utils.h:68:31: error: expected ‘)’ before ‘PRId64’

除非我添加标志-D__STDC_FORMAT_MACROS

第一台机器上有

gcc "4.8.5 20150623 (Red Hat 4.8.5-16)", 

另一台机器上有

gcc "4.8.5 20150623 (Red Hat 4.8.5-28)"

并使用

touch foo.h ; gcc -E -dM foo.h

获得与版本宏相同的结果。

我很困惑,为什么第二台计算机需要-D__STDC_FORMAT_MACROS来编译PRId64?

0 个答案:

没有答案