c++ - 为什么 PRIu64 在此代码中不起作用?

根据 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/

相关文章:

c++ - 如何在互斥锁中优先考虑特权线程?

c++ - 在 C++ 中,是否可以获取函数的返回类型以便在不调用该函数的情况下声明一个变量?

c++ - 对两个对应的数组进行排序

c++ - 如何在编译时检查两种类型是否相同(如果它与 Boost strong typedef 一

c++ - Visual Studio 可以在重建前提示吗?

c++ - 如何检查 STL 迭代器是否指向任何东西?

c++ - 使用 boost::graph 获取特定边缘

c++ - 如何获得 high_resolution_clock 的精度?

c++ - 如何以跨平台的方式获取(几乎)唯一的系统标识符?

c++ - 有没有办法在 Visual Studio 中获取某些 c++ 函数的调用图?