编写可移植代码所需编码准则
一、文件名不超过14个字符
- UNIX系统V衍生的操作系统规定,文件名应在14个字符以内
- UNIX系统的BSD系列的操作系统规定,文件名应在15个字符以内
- Windows NT几乎没有限制
- 考虑到程序的可移植性,应该将文件名限制在14个字符以内
二、不要再文件名中使用特殊字符
- 花里胡哨不要搞,不要在文件名中使用特殊字符或控制字符
- 要我说,就用英文字符加下划线就够了
三、利用条件编译提高可移植性
- 编写程序,经常需要移植到新的计算机环境或编译时环境时,都要修改代码,实在太麻烦了
- 用多种条件编译指令编写独立的头文件,并添加到所有程序,就能度过难关:
/* 条件编译 */
#ifdef XENIX
#define NEWAPI 600
#define NEWTYPE iNUM
#else
#define NEWAPI 300
#define NEWTYPE liNUM
#dedif
....
- 选择条件编译。得到的回报远远超过学习时间的投入。
四、了解编译器的限制
- 不同编译器对嵌套深度、模块大小、允许的标识符长度的限制条件各不相同
- 考虑移植的时候,就需要预先设定程序的边界值
编译器限制相关编码方针示例:
- 一个模块的大小应限制在60KB以内
- 一个模块的长度应小于XXXX行
- 禁止使用整体大小超过640KB的数组
- 嵌套深度不得超过5层
- 标识符长度应限制在32个字符之内
五、需考虑数据类型大小可能变化
- 举个最简单的例子,有的编译器认为char型可以保存负数,有的就不可以。有的编译器认为int和long型变量大小都是32位。
- 数据类型大小、能否处理负数,均取决于制造商。
- 经验丰富的程序员会在程序起始部分用sizeof()函数编写用于确认数据类型大小的代码
- 而菜鸟程序员只会嫌弃sizeof()函数的繁琐
- 如果一意孤行,导致数据溢出,系统瘫痪,谁来承担呢??
六、可移植性和高效性二选一
- 鱼和熊掌不可兼得
侧重点 | 对系统的依赖程度 | 代表性的实现手段 |
---|---|---|
重视效率 | 高 | 位字段、指针、二进制文件、移位运算、引用调用 |
重视可移植性 | 低 | 整数处理、数组、文本文件、乘2/除2运算、传值调用 |
七、用数组代替指针以提高可移植性
- 使用指针后,不得不编写以来机器的程序
- 要想提高移植性,就应该使用数组代替指针处理数据
八、选择可移植性更好的编程语言
- 可移植性和可读性通常成正比
- 只要不会引发严重的问题,最好选择可移植性更好的语言
九、不要插入低级语言编写的代码
- 在c语言不便携带代码中插入汇编、机器语言代码,移植的时候可能会出问题。
- 如果不得不使用低级语言实现特定功能,则应该用相应语言编写库,事先编译,然后以函数形式调用。
十、小结
本章从文件名、编译器、数据类型、编程语言等几个方面展开介绍移植性问题,让我在今后编写大型项目时有了很好的借鉴与认知!