C语言编程需要注意的64位和32机器的区别
来源:互联网 发布:淘宝服务器时间 编辑:程序博客网 时间:2024/06/16 01:29
一、数据类型特别是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来替代它。
http://blog.chinaunix.net/uid-23193900-id-3331197.html
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别
- C/C++ 32位机器和64位机器 差异问题总结 跨平台 移植问题 语言编程需要注意的64位和32机器的区别
- 语言编程需要注意的64位和32位机器的区别
- win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
- win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
- win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
- win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
- win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
- 语言编程需要注意的64位和32机器的区别
- 语言编程需要注意的64位和32机器的区别 .
- 语言编程需要注意的64位和32机器的区别
- MyBatis-处理字段名与实体类名不一致的情况 -04
- 第五章,(while循环)1000以内的奇数和(C++)
- HDU {A} + {B}
- java复习之动态代理
- springMVC+mybatis+spring security<三>:使用数据库管理资源
- C语言编程需要注意的64位和32机器的区别
- Java BufferedReader下载网络文件
- jQuery ajax - ajax() 方法
- 心情记录-2015年5月26日 13:34:26
- LINUX DDR驱动知识
- 从导航栏下开始计算坐标
- CImage的学习
- sdf
- 第十一周 项目四 类族的设计(2)