使用固定宽度整数时,C 98 pedtical错误

C++98 pedantic errors when using fixed width integers

本文关键字:pedtical 错误 固定宽度 整数      更新时间:2023-10-16

我的公司正在慢慢移动到C 98。C 98是C的超集,因此这不是问题,但这是。使用printf打印64位固定宽度整数在与pedantic,警告标志结合使用时不起作用,并为32位环境指定代码。

我需要打印的数字是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

c 98没有uint64_tPRIX64(NOR llx(。这些被引入C 11中的C (侧音:直到C99标准之前,它们才在C中(。

这些宏可能是偶然工作的,因为它们是由标准库提供的,大概是对新标准的支持,并且不会竭尽所能防止较旧的代码使用新功能。但是他们不能保证工作

编译器似乎没有警告宏,可能是因为实施者没有在仪器前处理预处理器来执行此类诊断。但是编译器足够友好,可以诊断使用非标准printf指示符(llx指示符PRIX64宏可扩展到目标系统上(。