我的公司正在从 C 慢慢转向 C++98。C++98 是 C 的超集,所以这应该不是问题,但确实如此。printf
与 pedantic、警告标志和指定 32 位环境的代码结合使用时,无法打印 64 位固定宽度整数。
我需要打印的数字是uint64_t
. 而且我了解使用PRIX64
时的用法printf
。但是,一旦在编译时添加了额外的标志,就会出现错误。
我查看了标题,看看是否有什么奇怪的地方,但一切看起来都很好。我不确定为什么在 C 中使用这种组合而不是在 C++ 中。当然,解决这个问题的正确方法是开始使用std::cout
,但是要编辑的代码太多,一次完成所有工作是不可行的。
下面显示的最小示例(print.cpp):
#include <stdio.h>
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
int main()
{
uint64_t num = 0x0;
printf("num is %" PRIX64"\n", num);
return 0;
}
用于编译它的命令:
g++ print.cpp -o print --std=c++98 -Wall -m32 --pedantic
预期结果:没有错误,打印数字。结果:
warning: ISO C++ does not support the ‘ll’ gnu_printf length modifier