C++设计开发规范(6):移植性设计规范
来源:互联网 发布:高质量java程序设计 编辑:程序博客网 时间:2024/06/05 02:13
6. 移植性设计规范
本规范中只讨论C++应用程序在不同的操作系统(如Linux和Windos操作系统)平台之间的移植性。
l 推荐不要加入移植性设计,如果需求/软件架构没有明确要支持可移植性。
l 推荐尽量使用C标准库函数。
√ 要求分离出不可移植的代码。
例如,
n 汇编代码
#ifdef SOMECODE __asm{…}
n 文件分隔符
WINDOWS平台采用的是”/”,而UNIX/linux使用的是”/”。
#ifdef UNIX
#define SEPERATOR ‘/’
#endif
#ifdef _WINDOWS||__MSDOS__
#define SEPERATOR ‘//’
#endif
n 基本类型,不同操作系统版本对于基本类型、指针的定义是有差别的。
如在64位系统上,指针是64位的。;而在32位系统上,指针是32位的。
typedef char int8_t;
typedef __int16 int16_t;
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned char uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned int uint_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
#ifndef _INTPTR_T_DEFINED
#ifdef _WIN64
typedef __int64 intptr_t;
#else
typedef int intptr_t;
#endif
#define _INTPTR_T_DEFINED
#endif
#ifndef _UINTPTR_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 uintptr_t;
#else
typedef unsigned int uintptr_t;
#endif
#define _UINTPTR_T_DEFINED
#endif
typedef intptr_t ssize_t;
√ 要求抽象应用程序依赖于平台API相关的接口。
例如,对于线程的操作,linux和windows平台的API有着不同的定义。
那么我们可以把线程操作相关的接口给抽象出来,如:
class Thread
{
public:
static Thread* Create();
static Thread* CurrentThread() const;
void Suspend();
void Join();
void Sleep();
void Start();
uint_t GetID() const;
bool IsAlive() const;
void SetPriority(int32_t priority);
int32_t GetPriority() const;
//...
};
× 不要使用平台相关的类型或typedef,平台中立的类型或typedef。
例如,
typedef VDWORD unsigned long;
typedef VWORD unsigned short;
DWORD value; //不好
VDWORD value//好
× 不要使用移位操作符来进行指针运算。
× 不要假设在不同的平台上相同的结构(struct)具有同样的数据长度、对齐方式和字段的存放顺序。
例如,
struct StreamPosition
{
int __Size;// 不要使用__Size来记录结构长度。
int BeginPosition;
int EndPosition;
};
//不好
StreamPosition streamPos;
int begPos = *(int*)(&streamPos);
- C++设计开发规范(6):移植性设计规范
- C++设计开发规范(3):类型设计规范
- C++设计开发规范(4):成员设计规范
- C++设计开发规范(5):扩展性设计规范
- 项目开发规范,数据库设计规范
- 数据库设计规范之对象设计使用规范
- C++设计开发规范((9):并行性设计开发规范
- Dragonboard 410C 之 开发板设计规范
- Mysql数据库设计规范之三数据库SQL开发规范
- 命名规范《.NET设计规范》
- C++设计开发规范
- 数据库设计开发规范
- C程序开发规范
- object-c开发规范
- 网页设计规范及脚本语言规范
- 数据库设计规范(命名规范)
- 数据库设计规范(命名规范)
- 数据库设计规范(命名规范)
- C++设计开发规范(3):类型设计规范
- c#WinForm中通过鼠标点DataGrid事件获取DataGrid Cell数据
- C++设计开发规范(4):成员设计规范
- 获取Exe版本号
- C++设计开发规范(5):扩展性设计规范
- C++设计开发规范(6):移植性设计规范
- .net 注册COM+应用组件的步骤
- 报任安书
- C++设计开发规范((7): 错误处理规范
- c# 对COM+对象反射调用时地址参数处理
- C++设计开发规范((8):安全设计开发规范
- oracle 在linux4.0下的安装过程
- Google式的垄断
- C++设计开发规范((9):并行性设计开发规范