博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
int,int32_t,int64_t
阅读量:5142 次
发布时间:2019-06-13

本文共 1079 字,大约阅读时间需要 3 分钟。

这些事跨平台编程导致的; 一、数据类型特别是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来替代它。

转载于:https://www.cnblogs.com/Free-Thinker/p/7058773.html

你可能感兴趣的文章
linux用命令行编译使用函数库
查看>>
关于数学学习
查看>>
第九篇 AJAX
查看>>
CSS的一些总结
查看>>
C# 多线程,异步,并行编程
查看>>
面对对象初识
查看>>
隐私条款-77Studio
查看>>
flare3d_animation
查看>>
GridView行背景色改变效果
查看>>
Krpano教程 生成平面图
查看>>
常见的 JavaScript 内存泄露
查看>>
在Salesforce中实现对Object的增删改查操作
查看>>
火狐浏览器中js获取event对象
查看>>
【观点】“马云:金融是要为外行人服务",这个观点其实并不新鲜
查看>>
Python简单剪刀石头布编程实例
查看>>
懒加载和预加载---性能优化
查看>>
linux c实现的服务器与客户端模型(使用TCP,多进程)
查看>>
10. 面向holder编程、自动轮询
查看>>
Js小知识及一些常见易混淆的知识点
查看>>
采用FPGA实现音频模数转换器
查看>>