依睛(IT blog) 我回来了,PHP<-->C/C++ LINUX

笨鸟

统计

积分与排名

友情连接

最新评论

注意点 在不同位数的机器上,int长度不变,long长度变化

源地址: http://bbs.chinaunix.net/viewthread.php?tid=1080376

这两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8

不是说int会变吗,为何变得是long?
还有如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?
谢谢指教。。

2楼 发表于 2008-4-15 09:35 
QUOTE:
原帖由 maxxfire 于 2008-4-15 09:28 发表
这两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8

不是说int会变吗,为何变得是long?
还有如果要写个通用的程序,订 ...

回答:   在16bit系统中sizeof(int)=2;
在有的64bit系统中的确有sizeof(int)=8的情况,跟机器字长和编译器都有关.

要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?"

用long long 吧,相对好一些,但其它代码不需要重新编译是比较困难的!

使用int32_t,int64_t,int16_t等类型,在头文件<stdint.h>中定义的

=================================
两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8
不是说int会变吗,为何变得是long?


The common programming model for existing 32-bit Unix stystems is caled the ILP32 model,denoting that integers, long integers and pointers occupy 32 bits. The model that is becoming most prevalent for 64-bit Unix systems is called LP64 model, meaming only long integers and pointers require 64 bits.


至于还有如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?
赞同楼上的观点
不过楼主要求不重新编译是不行的吧

[ 本帖最后由 zhuhefang2006 于 2008-4-15 10:15 编辑 ]


使用#include <stdint.h>
8位:int8_t, uint8_t

posted on 2008-12-11 10:21 向左向右走 阅读(1470) 评论(0)  编辑 收藏 引用 所属分类: C/C++学习资料库

只有注册用户登录后才能发表评论。