gpt4 book ai didi

c++ - 有没有办法绕过不同编译器上的 printf 错误?

转载 作者:行者123 更新时间:2023-12-02 01:46:04 26 4
gpt4 key购买 nike

我有以下代码行:

printf("\n\nTime taken for simulation: %ld milliseconds\n", duration.count() );

在我家的机器上,我得到了错误,

main.cpp:292:65: error: format specifies type 'long' but the argument has type 'std::__1::chrono::duration<long long, std::__1::ratio<1, 1000>>::rep' (aka 'long long') [-Werror,-Wformat]

如果我将 %ld 更改为 %lld,此错误将得到解决我用 g++ -std=c++14 .家庭编译器版本是:

Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: arm64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

在我操作的linux集群上,如果用%lld运行,出现如下错误,

main.cpp:229:83: error: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘std::chrono::duration<long int, std::ratio<1, 1000> >::rep {aka long int}’ [-Werror=format=]

我使用 g++ -std=c++14 .集群编译器版本为:

g++ (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如果我将 %lld 更改为 %ld,一切都很好。

有没有办法打印出 duration.count(),其中持续时间定义为 auto duration = std::chrono::duration_cast<std::chrono::milliseconds> (stop-start);其中 stop、start 是由 std::chrono::high_resolution_clock::now(); 指定类型的变量.

如果您有任何建议,我们将不胜感激。

最佳答案

一个简单的解决方案是无条件地转换为long long:

long long count = duration.count();
printf("%lld", count);

另一方面,我建议避免使用 printf 及其脚枪。

关于c++ - 有没有办法绕过不同编译器上的 printf 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70870429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com