美文网首页
第10章 编写可移植代码所需编码准则

第10章 编写可移植代码所需编码准则

作者: FelixDai | 来源:发表于2019-08-04 16:38 被阅读0次

10.1 文件名不超过14个字符

编程时,始终要考虑下面两个环境:

  1. 运行时环境(run time environment)
  2. 编译时环境(compile time environment)

运行时环境中,尤其需要注意文件名。不同操作系统对文件名长度有不同限制,考虑到这一点,文件名最好不要过长。例如,由UNIX系统V衍生的操作系统规定,文件名应在14个字符之内。UNIX的BSD版本系列的操作系统则将其限定在15个字符之内。Windows NT支持长文件名,几乎可以说对文件名长度没有任何限制。考虑到程序的可移植性,应该将文件名长度控制在14个字符之内。

10.2 不要在文件名中使用特殊字符

10.3 利用条件编译提高可移植性

编写程序时,经常会需要移植到不同计算机环境。每次需要移植到新的计算机环境或编译时环境时,都要修改代码,实在太麻烦了。计算机的使用环境可以分为16位、32位和64位的int型处理器。操作系统可以将一个字符的大小定义为8位或16位。

编写依赖 1.计算机 2.操作系统 3.编译器的程序时,只需要考虑条件编译即可。即使目前没有需求,但说不准什么时候可能需要切换到与之前完全不同的计算机、操作系统或编译器上。

10.4 了解编译器的限制

不同编译器关于 1.嵌套深度 2.模块大小 3. 允许的标识符长度的限制条件各不相同。因此,编写程序前应该参考编译器说明手册,预先设定程序的边界值。

10.5 需考虑数据类型大小可能变化

10.6 不要指定绝对路径

10.7 可移植性和高效性二选一

编写程序时,可移植性和高效性往往不可兼得。提高可移植性就意味着要损失效率,而提高效率往往需要以牺牲可移植性为代价。这一点在C语言系列中尤为突出。

侧重点 对系统的依赖程度 代表性的实现手段
重视效率 位字段、指针、二进制文件、移位运算、引用调用等
重视可移植性 整数处理、数组、文本文件、乘2/除2运算、传值调用等

为什么可移植性和高效性时互相矛盾的呢?如前所示,提高效率的奇数方法很大程度上都依赖系统。换言之,越是针对专门设备进行的特殊化处理的程序,其效率越高。也就是说,一定会牺牲可移植性。

10.8 用数组代替指针以提高可移植性

数据类型的大小可能因为计算机型号、编译器或操作系统的不同而变化。以int型为例,有些型号的计算机规定其大小为2字节,而有些则规定为4字节。由此可见,使用指针后,不得不编写依赖机器的程序。因此,要想提高可移植性,就应该用数组代替指针处理数据。

当然,从某些层面看,指针运算比数据更快、更简便、更精确。特别是开发应用于嵌入式系统的程序时,有时不得不考虑使用指针运算。但除这些情况外,日常统计处理等仅用数据结构也足以应对的情况下,则应该用数组代替指针。因为它可以使程序更加清晰易懂,可移植性也更优秀。

10.9 选择可移植性更好的编程语言

现代计算机语言是逐步改良的结果,不断向着优化可读性、精确性、可移植性的方向进化。据此,可移植性伴随着第1代语言、第2代语言、第3代语言的发展不断提高,第4代语言的可移植性总体要好于之前的几代。特别是最近的标准化语言中的HTML5,其可移植性非常出众。只要有标准Web浏览器,它就可以在任何机器上运行。C语言属于第3代,其可移植性也要优于之前的语言。

但目前,嵌入式领域仍是C和C++语言的天下。

仍有一点不容忽视,可移植性和可读性通常成正比。对于可移植性最差的机器语言,其可读性要逊色于可移植性更好的汇编语言;而对于可移植性更好的C语言,其可读性同样优于汇编语言;对于以可移植性最优而闻名的HTML5,其可读性同样优于C语言。

10.10 不要插入低级语言编写的代码

有些编程语言允许在程序内插入用低级语言编写的代码,C语言就是如此。但如果在C语言编写的代码中插入汇编语言、机器语言代码,那么C语言的可移植性方面可能出现问题。虽然插入低级语言代码可能不影响编译过程,但仍然应尽量避免在可移植性更好的第3代语言中插入前两代语言的代码。这是出于可移植性的考虑。

如果不得不用低级语言实现特定功能,则应该用相应语言编写库,事先编译,然后再以函数形式调用。

相关文章

网友评论

      本文标题:第10章 编写可移植代码所需编码准则

      本文链接:https://www.haomeiwen.com/subject/bjdydctx.html