如何打印数值类型
问题如题目,在最近的工作中,使用 cppcheck
对代码进行静态检查,遇到打印 size_t
类型以及其他类型的警告,再这里记录下。
本文提到的打印输出,指的是 printf
函数或者 Format
函数中格式化的输出。
各种数据类型的打印
先看 size_t
类型,应该要如何打印。如果用 %d
,会输出如下警告:
尝试使用 %u
、%lu
和 %llu
,都会有上述错误,这就很奇怪了,经过一番搜索,从这里找到答案。
对 size_t
类型,既可以使用 %d
也可以使用 %zu
,使用后者,cppcheck
不会报移植可能性问题。这里的 z
控制长度,u
表示无符号整形值。
size_t
在32位和64位下的定义不同:
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else /* _WIN64 */
typedef unsigned int size_t;
语言标准规定:sizeof(int) <= sizeof(long) <= sizeof(long long)
既然说到这里,针对 无符号整形值、有符号整形值,要如何无警告地打印呢?
-
有符号整形值 int --》 %d
-
有符号整形值 long --》 %ld
-
有符号整形值 long long --》 %lld
-
无符号整形值 unsigned int --》 %u
-
无符号整形值 unsigned long --》 %lu
-
无符号整形值 unsigned long long --》 %llu
从上面可知,d
表示有符号,u
表示无符号,一个l
表示一个long
。
上面是语言基础类型的打印,还有不同编译器,自带的标准库定义的平台无关类型,如上面的 size_t
、__int64
、_int64
`
细节注意
在打印同类变量时,要保证输出格式一致性。如果是16进制输出,那么所有地方都要是16进制输出,并且输出前缀名称要一致,这样方便在日志文件中搜索定位。
从使用者的角度去查看日志信息,看各种打印信息的一致性、可搜索性、是否有助于问题定位。
参考链接
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击