CC++跨平台编码教程(概论).ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 在跨平台时,由

文档评论(0)

浪漫唯美-文档菜鸟 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档