64位操作系统编码规范

1 篇文章 0 订阅
1 篇文章 0 订阅

64位操作系统编码规范

一、Linux及Windows主要类型字节长度

类型

32

64

short

2

2

int

4

4

long

4

Linux:8 Windows:4

size_t

4

8

void *(及其它指针)

4

8

time_t

8

8

float

4

4

double

8

8

 

二、不允许使用long型;

三、不允许把int强制转换为指针,反之亦然;下面是错误的:int i = (int )ptr; 或: void *ptr = (void *)s32Tmp;

四、不允许在不同类型的指针(有继承关系除外)进行强制转换,如:int *ipTmp; time_t *tpTmp = *ipTmp;是错误的;

五、强烈建议使用带长度的类型,如:SInt32/UInt64等;

六、必须使用%p打印指针,如printf(this[%p]\n,this)

七、强烈建议不要采用scanf,scanf非常危险,Format和参数类型不一致时,非常容易导致越界写。如果必须使用,则必须认真区别32和64位的操作系统整数长度的差别,需要时,分别针对32和64位编写代码;

八、如果编写动态链接库,必须加上–fPIC编译选项;

九、采用GCC编译器时,必须使用-Wlong-long、-Wformat -Wpointer-arith 来发现 64 位编译问题,并关注相关警告信息;

十、编译器指示宏定义

宏定义

描述

__linux__

Linux操作系统,与Windows及其它类型操作系统区别

i386

Linux操作系统,32位x86架构

x86-64(注意是减号)

Linux操作系统,64位x86架构

_WINDOWS_

Windows操作系统,与其它操作系统区别

_X86_

Windows操作系统,32位x86架构

__MacOSX__

Apple OSX

_posix_

符合POSIX规范,类Unix操作系统,包括Linux/IBM  AIX/HPUS/Sun Solaris/Apple MacOSX

十一、   宏使用说明:

我们的代码要求同时支持32位和64位版本;

尽量不要使用与架构相关的宏,如i386/ x86-64/_X86_/Win32等,在同一操作系统中,API一般与架构无关,这样可以让代码具有良好的移植性;

我们的软件主要在类Unix(符合POSIX规范,包括Linux)Windows下运行,优先使用_posix_作为区别非windows操作系统;

如果对准备使用的类UNIX下系统调用(API)是否支持其它操作系统没有把握,可使用_posix_加以标记,待日后移植到其它操作系统时,再测试或修改;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值