《C++高级编程》之--开发跨平台和跨语言的应用

第六部分 开发跨平台和跨语言的应用
尽管对C++做了标准化,但是在用C++编写专业质量的程序时, 平台间的差异最终还是会反映出来,即使开发平台限于特定的, 编译器的一些小差异也会导致很严重的编程问题。
 尽管C++是通用语言,但是可能并非完成特定任务的最佳选择。[ C++ 与其他语言相结合]
一、跨平台开发
 C++数组定义为保存在连续的内存块中,这个特定的实现细节就使得C++语言暴露了一个可能的问题: 并非所有系统都采用同样的方式来组织和管理内存
 
 1、体系结构问题
   ①、使用高级语言的好处就是编译器会负责将代码转换为处理器的 本地汇编码格式
      在编译一个C++程序时,源代码会转换为二进制指令由计算机执行,这种 二进制格式由平台定义,而不是 C++ 语言定义
       跨编译 :解决二进制兼容性问题。
      开源发布:让最终用户自己指定本地编译,并构建一个程序版本。
 
 ②、字和类型大小
    字(word)是计算机体系结构的基本存储单元。一般来说,如果系统的字大小较大,就能处理更多的内存,并能更快地处理复杂的程序。
    由于 指针是内存地址,因此 指针的大小自然就是字大小
    例:指针类型变量;32位Pentium体系结构中:4bytes。
                      64位Itanium体系结构中:8bytes。
    注意:C++标准并没有预先确定大多数类型的大小。
 
 ③、字序
    所有现代计算机都以二进制表示来存储数字,不过同一个数载两个平台上的表示可能并不一样。
    只有当数据要 跨体系结构迁移时才会反映出字序问题。
    PowerPC、Sparc处理器:Big-endian ordering(先放入内存的是数字中 较大的部分)
    x86处理器:Little-endian ordering(先放入内存的是数字中 较小的部分)
 
 2、实现问题
 ①、编译器疑难问题和扩展
    编译器在最新增加的语言特性方面往往存在问题,因此口碑不佳。
 ②、库实现
    编译器可能包括C++标准库的一个实现,其中包括标准模板库。不过,STL使用C++编写的,没有必要一定使用与编译器捆绑的STL库。
 
3、特定于平台的特性
专业的程序可能会要求一些 C++ 并未提供的功能
·      图形用户界面:用C++写一个图形应用,需要使用 特定于平台的库
·      网络:C++没有为网络提供机制,但是存在许多的标准库。
·      OS事件和应用交互:在纯C++代码中,很少与外部操作系统合其他应用交互,如果 没有平台扩展,能提供给标准C++程序的只有命令行参数而已。例如:粘贴复制之类的操作在C++中就没有直接提供支持, 需要平台提供的库
·      低级文件
·      线程:在C++中并未直接对程序中并发线程的执行提供支持,其实现相当于依赖于操作系统的内部工作,所有C++语言没有包含线程,最常见的线程库称为: pthreads
 
二、跨语言开发
 有时你想要的是一种混合语言,希望它混合了C++的 一般特性以及另一种语言的 特有特性
1、混合C和C++
2、转换模式
 要考虑在 过程性库之外编写一个面向对象包装器
3、与C代码的链接
 大多数的C代码都能顺利地用C++编译器编译,如果只有 编译后的 C 代码,可能是以库的形式提供给你,此时仍然能在C++程序中加以使用,不过为此需要多做几个步骤。
  extern关键字及时告诉编译其某些函数是用C写的。
 例: extern “C” {
           Void do_some_thing();
      }
 使用extern的一种更常见的模式是在 头文件级使用。
 例: extern “C” { #include “graphislib.h” }
 ※ 指定整个头文件定义的函数都是用C编写的
  注意:尽管C++基本上是C的一个超集,但是不同的语言有不同的设计目标,可以调整C代码以便在C++中正常工作,尽管这种做法也是很常见的,但是 更好的做法是在过程性 C 代码外提供一个面向对象的 C++ 包装器
 
4、利用JNI混合Java和C++
  Java 本地接口( JNI :Java语言的一部分,使用JNI,可以访问不是用Java语言编写的功能。如果Java程序开发的应用对性能要求很高,或者需要传统的代码,访问C++库就会很有用。
 
5、C++与Perl和Shell脚本的混合
6、C++与汇编代码的混合
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值