9.9 其他移植性问题
平台之间的许多差异使C++(www.cppentry.com)源代码和创建过程(build procedure)的移植性变得更加复杂。在这里,一个还有问题的方面就是系统命令-例如,用于显示文件内容的命令,或者用于创建程序的命令(通常称为make或者build)。大多数平台都提供了一个或者多个命令行解释器,或者称为shell,在shell中就可以执行系统命令;而且,几乎每个shell都提供了它本身的编程(www.cppentry.com)语言。遗憾的是,平台的差异也使shell和系统命令的差异非常显著。即使相同名称的命令,但在不同的平台上,也可能做不同的事情,或者拥有不同的接口。系统命令之间的差异令可移植地使用标准C++(www.cppentry.com)库的函数系统的可能性几乎为0(函数系统传递一个字符串参数给操作系统,然后这个字符串被作为命令解释并执行)。在具有这些不一致性的平台之间,试图编写可移植的创建过程是很具挑战性的。
另一个源代码的可移植问题就是文件系统。许多平台都提供了一个层次化的文件系统。遗憾的是,文件系统的命名文件的语法多种多样。例如,在Unix系统下,为了在包含当前目录的dir目录下引用file1.c文件,我们可以使用:
- ../dir/fi1e1.c
然而在VMS系统下,我们应该使用:- [_.dir]file1.c
而在Windows系统下,我们就必须这样使用: - ..\dir\file.c
这些区别影响了C++(www.cppentry.com)源代码和创建过程的可移植性,因为它们都要经常操作路径名称。例如,下面的代码 - #include"../dir/file1.h"
- //...
- ifstream f("../dir/file2.c");
可能只对那些辨识UNIX系统路径语法的平台之间才是可移植的。为了提高代码的可移植性,某些平台可以辨识几种路径语法。例如,大多数(几乎所有)运行在Windows平台下的编译器都可以辨识Windows和UNIX的路径语法。
我们很少提及另一个可移植问题的来源:窗口系统。不同的平台会提供不同的窗口系统,并使用不同的应用程序编程(www.cppentry.com)接口(API)。试图编写对几个窗口系统都可以移植的代码也是非常困难的。某些程序库通过在几个窗口系统API上放置一个单一接口,来解决这个窗口系统问题。