У меня есть некоторый код в моем файле 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?