根据 this answer ,我尝试打印 uint64_t
,但它给了我一个错误:
error: expected ``)' before 'PRIu64'
以下是显示我正在尝试做的最小代码:
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <cstdio>
class X {
X() {
uint64_t foo = 0;
printf("%07" PRIu64 ": ", foo);
}
};
int main() {}
这个最小的代码可以编译,但我的实际代码没有。但是,我已经尝试将 X::X()
中的 2 行与我的实际代码完全相同,但这不起作用。
我应该寻找什么来进一步调试?我的实际代码还有 #include
的其他 header 。这会导致问题吗?包含标题的顺序重要吗?
编辑
PRIu64
在我的机器上定义如下:
# if __WORDSIZE == 64
# define __PRI64_PREFIX "l"
# define __PRIPTR_PREFIX "l"
# else
# define __PRI64_PREFIX "ll"
# define __PRIPTR_PREFIX
# endif
# define PRIu64 __PRI64_PREFIX "u"
最佳答案
在 C++ 中,宏不会仅通过包含文件来自动定义。
您需要添加以下内容:
#define __STDC_FORMAT_MACROS 1
之前
#include <inttypes.h>
How to printf uint64_t? Fails with: "spurious trailing ‘%’ in format"
https://stackoverflow.com/questions/14535556/