有这样的代码:
#include <cstdio>
#include <chrono>
int main()
{
auto d = std::chrono::microseconds(1).count();
printf("%lld", d);
return 0;
}当以64位模式编译时,就会有一个警告:
main.cpp:在函数‘int():main.cpp:7:19: format’%lld‘期望类型为’long long int‘的参数,但参数2的类型是’long int‘-Wformat= printf("%lld",d);
在32位模式编译(带有-m32标志)时,不存在此警告。看起来std::chrono::duration::rep在64位程序中是long int类型,在32位程序中是long long int类型。
是否有一种可移植的方法像%zu说明符那样打印size_t?
发布于 2017-08-31 11:48:39
不要使用auto限定符,而是使用固定大小的整数int64_t。
#include <cstdio>
#include <chrono>
#include <cinttypes>
int main()
{
int64_t d = std::chrono::microseconds(1).count();
printf("%" PRId64 "\n", d);
return 0;
}发布于 2017-08-31 11:42:52
我建议你使用std::cout,因为你在C++。这将是便携式的。
但是,如果必须使用printf,则更改以下内容:
printf("%lld", d);对此:
#include <cinttypes>
printf("%" PRId64 "", d); 另一种方法是将d转换为最高的数据类型(可以容纳这两种类型),如下所示:
printf("%lld", static_cast<long long int>(d));发布于 2017-08-31 11:45:54
您可以在打印之前将其转换为long long int:
#include <cstdio>
#include <chrono>
int main()
{
auto d = std::chrono::microseconds(1).count();
printf("%lld", static_cast<long long int>(d));
return 0;
}但是我觉得用std::cout更好
https://stackoverflow.com/questions/45980608
复制相似问题