Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;98使用固定宽度整数时的迂腐错误_C++_32bit 64bit_Gcc Warning_C++98_Gcc Pedantic - Fatal编程技术网

C++ C++;98使用固定宽度整数时的迂腐错误

C++ C++;98使用固定宽度整数时的迂腐错误,c++,32bit-64bit,gcc-warning,c++98,gcc-pedantic,C++,32bit 64bit,Gcc Warning,C++98,Gcc Pedantic,我的公司正在慢慢地从C转向C++98。C++98是C的超集,所以这应该不是问题,但确实是。当与迂腐、警告标志和为32位环境指定代码结合使用时,使用printf打印64位固定宽度整数不起作用 我需要打印的数字类型为uint64\u t。我了解使用printf时使用PRIX64。但是,一旦在编译时添加了额外的标志,就会出现错误 我看了一下标题,看看有没有什么奇怪的地方,但看起来都不错。我不知道为什么使用这个组合在C中工作,而不是C++。当然,解决这个问题的正确方法是开始使用std::cout,但是有

我的公司正在慢慢地从C转向C++98。C++98是C的超集,所以这应该不是问题,但确实是。当与迂腐、警告标志和为32位环境指定代码结合使用时,使用
printf
打印64位固定宽度整数不起作用

我需要打印的数字类型为
uint64\u t
。我了解使用
printf
时使用
PRIX64
。但是,一旦在编译时添加了额外的标志,就会出现错误

我看了一下标题,看看有没有什么奇怪的地方,但看起来都不错。我不知道为什么使用这个组合在C中工作,而不是C++。当然,解决这个问题的正确方法是开始使用
std::cout
,但是有太多的代码需要编辑,一次完成这一切是不可行的

下面显示的最小示例(print.cpp):

预期结果:无错误,已打印编号。 结果:


C++98没有
uint64\u t
PRIX64
(也没有
llx
)。这些被引入C++ 11中的C++(边注:它们不是C,直到C99标准)。 这些宏可能碰巧可以工作,因为它们是由标准库提供的,标准库可能支持较新的标准,并且不会特意阻止旧代码使用新功能。但它们并不能保证起作用


编译器似乎没有对宏发出警告,可能是因为实现者没有退出检测预处理器以执行此类诊断。但是编译器非常友好,可以诊断非标准的
printf
说明符(在目标系统上扩展到的
PRIX64
宏的
llx
说明符)的使用情况。

类似于C++98不是C的超集,虽然两者有一个足够大的公共子集,可以在C++中编程。C++98实际上不是任何C版本的超集。C++98标准C库中的C库接口是C99库的子集。但是,无论是< C++ > STDIO。您应该使用
cstdio
cinttypes
。(但这可能没有什么区别。)警告的意思是它所说的<代码>PRIX64来自C99。当然,C++98不支持一年后才标准化的C特性。C++11有一些C++98所没有的与C的兼容性要求,包括这些宏。老实说,如果可以使用C++11,那就是我想要的。C++ 11有一些主要的生命质量改进,使编写C++代码更容易,同时也引入了移动语义和智能指针(这使得在编写敏感代码时避免复制大数据块更容易)。
#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