我的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?