- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C/C++跨平台编码
概论
关于预编译宏#pragma
Windows
Windows使用的#pragma once来防止头文件重复引用
Windows/Linux
在跨平台的代码中,我们使用
#ifndef … #define … #endif宏来实现这个功能
#include
Windows
Windows中的#include中可以使用“\”,而且路径名称大小写并无区别。
例如下面的写法是等效的:
#include “..\\ACE.h”
#include “../ACE.h”
#include “..\\ace.h”
Windows/Linux
跨平台的代码中,#include中只能使用“/”(同网址中使用的相同),而且路径名、文件名都是大小写敏感的:
#include “..\\ACE.h”(错误 )
#include “ACE.h”与#include ”ace.h”不等效
开发工具
Windows
Windows中我们通常都使用Visual Studio系列的开发工具来开发程序代码
Windows/Linux
跨平台的代码也可以使用Visual Studio系列的开发工具来开发,这与Windows程序一样。
不同的是我们并不使用MS提供的SDK(比如MFC),而是使用C++标准库(VC已支持)和一些支出跨平台的SDK(比如ACE)提供的库
字符串处理
Windows
Windows中,我们使用CString来处理字符串。
Windows/Linux
跨平台代码中,我们使用C++标准库的std::string来处理字符串,这个类对应的头文件是string。
C++标准库还提供了流操作来处理字符串,比如std::stringstream,这个类对应的头文件是sstream。
多语言处理
MVC原则
MVC将系统分成了原始数据层,控制/映射层和视图层。在这三个层次中,只有原始数据层和视图层才可以处理多语言的问题,控制/映射层不应该介入此问题。
I/O处及时处理原则
当我们需要进行字符集转换时,请在I/O附近就完成这一功能。
所谓的I/O附近是指跨越模块、系统、文件读写操作等边界的附近。
这样做可以让模块内部、系统内部的其它代码免于字符串转换的负担,简化系统维护的难度和定位问题的难度。
无论是否要跨平台,在处理文字的时候,我们都会遇到多种字符集的问题。
这里我们提供两条原则来解决这一问题:
基本变量类型
Windows
Windows下,我们使用的是MS提供的一套变量类型,比如DWORD,WORD…
Windows/Linux
跨平台方式下,我们使用的是支持跨平台的SDK提供的变量类型。
以ACE SDK为例,我们使用的变量类型是ACE_UINT8,ACE_UINT32…
指针
32位系统
在32位系统中,有时我们需要将指针转换成整形变量。比如将指针用作map的key。
如果我们要使用整形变量保存指针,使用int或long就行了。
32位/64位系统
在跨平台时,我们使用typedef来解决这个问题。
比如在基于ACE SDK的开发中,我使用了如下方法:
#ifndef _ACE_POINTER_KEY_TYPE_
#define _ACE_POINTER_KEY_TYPE_
#ifndef ACE_WIN64
typedef ACE_UINT32 ACE_PointerKey;// For 32 bits OS.
#else
typedef ACE_UINT64 ACE_PointerKey;// For 64 bits OS.
#endif
#endif// _ACE_POINTER_KEY_TYPE_
list
Windows
Windows中,我们使用MS提供的CList类及其子类。
Windows/Linux
在跨平台时,我们使用的是C++标准库提供的std::list类。
map
Windows
Windows中我们使用MS提供的CMap类及其子类。
其实MS的CMap类严格意义上说只能算是一个哈希表,算不上树结构。
Windows/Linux
在跨平台时,我们使用C++标准库提供的std::map类。
线程
Windows
Windows中,MS提供了CWinThread和CThread两个类来创建线程
Windows/Linux
在跨平台时,由于线程、互斥锁、信号都是与OS相关的,所以我们只能使用支持跨平台的SDK提供的类库。
比如在ACE中,我们可以使用ACE_Thread::spawn来创建线程。
互斥锁
Windows
Windows中,MS提供了CCritialSection,CMutex等互斥锁。
Windows/Linux
在跨平台时,由于线程
您可能关注的文档
- H3C交换机维护与故障排除.ppt
- H3C交换机维护经典命令.ppt
- H3C 4G路由器解决方案.ppt
- 数据挖掘决策树算法ID3和C4.5.ppt
- C2C交易操作流程.ppt
- 核磁处理软件Mestre-C讲座5.ppt
- C&C08交换机的系统概述.ppt
- c语言指针教程.ppt
- c语言循环结构.ppt
- C语言数组教程.ppt
- 2025年春新北师大版八年级物理下册全册课件.pptx
- 2025年春新北师大版八年级物理下册全册教学课件.pptx
- 2025年秋季新北师大版八年级上册物理全册教学课件.pptx
- 2025年秋季新人教版九年级上册化学全册课件.pptx
- 2025年新人教版八年级上册物理全册课件.pptx
- 2025年秋季新人教版九年级上册化学全册教学课件(新版教材).pptx
- 新人教版七年级上册英语全册课件(2025年新版教材).pptx
- 锂离子电池前驱体磷酸铁合成方法研究现状及展望.docx
- 2024年东盟石油和天然气更新报告(英文版)-东盟.docx
- DB3209_T 1207.2-2022 建设工程档案管理 第二部分:房屋建筑工程文件归档和档案移交范围.docx
文档评论(0)