c – 在32位和64位程序中使用std :: chrono :: duration :: rep和printf

有这个代码:

#include <cstdio>
#include <chrono>

int main()
{
  auto d = std::chrono::microseconds(1).count();
  printf("%lld", d);
  return 0;
}

当这是在64位模式下编译时,则会出现警告:

06001

在32位模式下编译时使用此警告(使用-m32标志).看起来std :: chrono :: duration :: rep在64位程序中是long int类型,在32位程序中是long long int.

是否有一种可移植的方式来打印它像size_t的%zu说明符?

最佳答案
而不是使用自动限定符,使用固定大小的整数int64_t.

#include <cstdio>
#include <chrono>
#include <cinttypes>

int main()
{
    int64_t d = std::chrono::microseconds(1).count();
    printf("%" PRId64 "\n", d);
    return 0;
}

转载注明原文:c – 在32位和64位程序中使用std :: chrono :: duration :: rep和printf - 代码日志