当前位置: 首页 > article >正文

在 C/C++ 之中为什么应该建议使用C函数库定义的基础数值类型,而不是编译默认的关键字类型?

本文的阐述的问题如标题所示:

相信有过多种平台、编译器的 C/C++ 程序开发的童鞋深有同感,在不同的 C/C++ 编译器及平台之中,INT、LONG的长度可能都是不一样的,这可能会带来编程及运行时上面的一些疑难问题。

在IBM-S390X之中,INT在字符打印时,GCC编译器警告或会告诉你它占用非公标的13字节,你没看错不是2字节不是4字节,是13个字节,有时看上去运行不会存在问题,具有一定的麻痹性。

那么INT/LONG型呢?我记得在某一个平台上的 GCC 编译器这个东西是12字节来着,反正是遇到过的,总之人当时是有点麻木且懵逼的,因为这个问题并不好找。

虽然,我们可以忽略不计这种问题,毕竟字节多点就多点,总比少点就2个字节要好得多,但是严格意义的来说,在C/C++之中,我们不应该直接使用关键字的 INT、LONG 基础数值类型。

而是应该严格的使用,由目标平台编译器导出定义的基础类型,如:

int8_t、uint8_t、int32_t、uint32_t、int64_t、uint64_t、double_t、uint16_t、int16_t 等。

这样,可以确保我们在任何操作系统及编译器平台上面,编写的相同代码执行效果是一致性的,因为有些代码是通过二进制的算术溢出的来处理的,尤其是位运算对于数值的字节长度是非常敏感的,一旦字节数不同运行的预期结果就会合实际实现的不同,尤其是跨平台的应用程序开发,人们很难再所有的平台上面都能确保其运转无误,因为测试成本是非常昂贵的。

当你吃过毒打,把所有的INT、LONG、SHORT类型全部都改一次的时,你就知道开发的时候,老老实实用C语言标准库导出的基础数值类型是多么让人喜爱,即便这样的规定会让人感到痛苦万分,那只是你没有遭受过剧烈且刻苦铭心的毒打。

虽然在现在主流的编译器之中,如:GCC、CLANG、MSVCRT(CC),INT/LONG的长度基本都被约定不低于四个字节(DWORD),但可从来没说过,它不可以超过四个字节(DWORD),在某一个或几个平台上面统一,并不意味着所有的编译器及目标平台都是统一的,人们应当确保代码是一次性,尽可能可以移植到所有平台上,无需修改,重复调试直接稳定且可靠的运行。

另外使用C语言标准库导出的基础数值类型,具备统一性,基本上大家一看就懂,清晰及明了度是没有问题的,但是你自己单独在整一套类型,那就不一定了。 


http://www.kler.cn/a/378820.html

相关文章:

  • 华为od技术一面
  • 学习虚幻C++开发日志——定时器
  • 基于人脸识别PCA算法matlab实现及详细步骤讲解
  • 虚拟化环境中的精简版 Android 操作系统 Microdroid
  • [vulnhub]DC: 1
  • 哔哩哔哩车机版2.7.0|专为司机打造的车机版B站,内容丰富,功能齐全
  • Javase——正则表达式
  • C#开发webService接口
  • aws(学习笔记第九课) 使用AWS的网络存储EBS
  • Git 概述及相关命令(1)
  • 【小白学机器学习28】 统计学脉络+ 总体+ 随机抽样方法
  • 【Git】Git 版本控制与协作开发指南
  • 在VSCode中读取Markdown文件
  • 【linux-Day7】Vim的使用和简单配置
  • 前端技术月刊-2024.11
  • Google 地图类型
  • mysq-B+Treel(一)
  • 【HTML】——VSCode 基本使用入门和常见操作
  • zoho域名邮箱指南:如何设置优化烽火邮箱?
  • 学编程应该怎么写博客,有什么推荐的平台吗?
  • windows在两台机器上测试 MySQL 集群实现实时备份
  • 三十、Python基础语法(继承-下)
  • Shutdown Abort 强制关库,真的有可能起不来?
  • C++算法练习-day32——222.完全二叉树的节点个数
  • 宠物排泄物图像分割系统:高效目标识别
  • 开放式耳机什么品牌质量好?5款排行榜里的开放式蓝牙耳机