注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 
关于我

砍过人吸过粉站在路边接过吻 当过兵站过岗耍过流氓入过党 上过班下过岗打过领导得过奖

网易考拉推荐

写64位程序时遇到的问题  

2010-11-25 17:28:16|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近在64位操作系统下写程序,遇到点编译问题, 写下来,以供以后参考,省得忘记。


1  int 和指针之间转换问题
    用intptr_t来保证平台的通用性。
    64位不允许这么做,因为2者的长度是不一样的。
    要想把int转换成指针,int类型改为intptr_t类型,在include <stdint.h>里有定义

2  写socket程序时,socklen_t问题
    例如 accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size)里,sin_size就不能定义成int型,因为64位下sizeof是long
    解决办法:  这样定义 socklen_t sin_size

3 格式化字符串: long 用%ld;  指针用%p

4 数字常量要加L
       错误:  long l = 1  << a
       正确:  long l = 1L << a

5 符合扩展要避免有符号与无符号运算
    long n
    int    i = -1;
    unsigned k = 1;

      错误:  n = i+k
      正确:  n = (long) i + k   或者     n = (int)(i + k)

6 关于赋值运算
       不要交换使用int和long类型
       不要使用int类型来存储指针
       不要用指针来存放int类型
       尽量不要使用long类型数据, 用固定大小的数据类型宏定义(如int8_t int16_t int32_t int64_t)
  评论这张
 
阅读(290)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016