一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:

16位平台

char         1个字节8位
short        2个字节16位
int            2个字节16位
long         4个字节32位
指针         2个字节

32位平台

char         1个字节8位
short        2个字节16位
int            4个字节32位
long         4个字节
long long 8个字节
指针         4个字节

64位平台

char         1个字节
short        2个字节
int            4个字节
long         8个字节(区别)
long long 8个字节
指针        8个字节(区别)

二、编程注意事项

为了保证平台的通用性,程序中尽量不要使用long数据库型。可以使用固定大小的数据类型宏定义:

typedef signed char       int8_t

typedef short int             int16_t;

typedef int                      int32_t;

# if __WORDSIZE == 64
typedef long int              int64_t;
# else
__extension__
typedef long long int      int64_t;

#endif

三、使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,定义如下:

#if __WORDSIZE == 64
typedef long int                intptr_t;
#else
typedef int                        intptr_t;
#endif
编程中要尽量使用sizeof来计算数据类型的大小

以上类型定义都有相应的无符号类型。

另外还有ssize_t和size_t分别是sign size_t和unsigned signed size of computer word size。它们也是表示计算机的字长,在32位机器上是int型,在64位机器上long型,从某种意义上来说它们等同于intptr_t和 uintptr_t。它们在stddef.h里面定义。需要注意的是socket的accept函数在有些操作系统上使用size_t是不正确的,因为 accept接收的int*类型,而size_t可能是long int 类型。后来BSD使用sock_t来替代它。

最新文章

  1. LVS+Redis部署手册
  2. C语言 百炼成钢9
  3. SQLServer 之 2008还原的时候无法获得对数据库的独占访问权解决
  4. HDU 1010 Temper of the bone(深搜+剪枝)
  5. 深入理解React、Redux
  6. Magicodes.Admin.Core开源框架总体介绍
  7. 2016/1/9:深度剖析安卓Framebuffer设备驱动
  8. Java ArrayList正确循环添加删除元素方法及分析
  9. Ubuntu16.04搭建OpenVPN
  10. js二分查找算法
  11. C++ Coroutine简明教程
  12. User Authentication with Angular and ASP.NET Core
  13. window 编译lua 5.3
  14. python3 - 默认参数为列表
  15. https://stackoverflow.com/questions/51751426/failed-to-run-the-da-platform-trial-vm
  16. elasticsearch 口水篇(4)java客户端 - 原生esClient
  17. 001.NFS简介
  18. U盘安装OSX
  19. 重温CLR(五)类型和成员基础
  20. Linux 下安装tomcat 服务器

热门文章

  1. Java I/O : Bit Operation 位运算
  2. MyBatis源码解析(四)——DataSource数据源模块
  3. 监控 | open-falcon | 安装
  4. mysql服务器架构
  5. json数据格式说明
  6. navicat连接不上Linux服务器上的MySQL
  7. oracle10G/11G官方迅雷下载地址合集
  8. Java核心技术 对象与类
  9. 跨域 webpack + vue-cil 中 proxyTable 处理跨域
  10. Scala(一) —— 基础