1、数据类型特别是int相关的类型在不一样位数机器的平台下长度不一样。C99标准并不规定具体数据类型的长度大小,只规定级别。做下比较:数据库
16位平台编程
char 1个字节8位安全
short 2个字节16位socket
int 2个字节16位函数
long 4个字节32位ui
指针 2个字节spa
32位平台操作系统
char 1个字节8位指针
short 2个字节16位blog
int 4个字节32位
long 4个字节
long long 8个字节
指针 4个字节
64位平台
char 1个字节
short 2个字节
int 4个字节
long 8个字节(区别)
long long 8个字节
指针 8个字节(区别)
2、编程注意事项
为了保证平台的通用性,程序中尽可能不要使用long数据库型。能够使用固定大小的数据类型宏定义,这些宏定义须要引用stdint.h头文件:
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
3、使用int时也能够使用intptr_t来保证平台的通用性,它在不一样的平台上编译时长度不一样,但都是标准的平台字长,好比64位机器它的长度就是8字节,32位机器它的长度是4字节,使用它能够安全地进行整数与指针的转换运算,也就是说当须要将指针做为整数运算时,将它转换成intptr_t进行运算才是安全的。intptr_t须要引用stddef.h头文件,它的定义以下:
#if __WORDSIZE == 64
typedef long int intptr_t;
#else
typedef int intptr_t;
#endif
编程中要尽可能使用sizeof来计算数据类型的大小
以上类型定义都有相应的无符号类型。
4、使用ssize_t和size_t
它们分别是unsigned和signed size of computer word size。它们也是表示计算机的字长,在32位机器上是int型,在64位机器上long型。使用它们对于增长平台的通用性有很大好处,从某种意义上来讲它们等同于intptr_t和uintptr_t。使用它们也须要引用stddef.h头文件。
5、socket的accept函数在有些操做系统上使用size_t是不正确的,由于accept接收的int*类型,而size_t的长度可能会超过int*的长度限制,致使错误。后来BSD使用sock_t来替代它。