使用固定宽度整数时,C 98 pedtical错误
C++98 pedantic errors when using fixed width integers
我的公司正在慢慢移动到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_t
或PRIX64
(NOR llx
(。这些被引入C 11中的C (侧音:直到C99标准之前,它们才在C中(。
这些宏可能是偶然工作的,因为它们是由标准库提供的,大概是对新标准的支持,并且不会竭尽所能防止较旧的代码使用新功能。但是他们不能保证工作
编译器似乎没有警告宏,可能是因为实施者没有在仪器前处理预处理器来执行此类诊断。但是编译器足够友好,可以诊断使用非标准printf
指示符(llx
指示符PRIX64
宏可扩展到目标系统上(。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 使用固定宽度整数时,C 98 pedtical错误