如何提高程序的可移植性
1.使用宏定义,处理依赖系统和处理器的幻数
}
}
1) 写程序请一定要考虑到你今后可能换个编义宏!比如MS译器。所以请使用预定的编译器就事先定义了__MSC,而Borland的就预先定义了__BORLAND_C。Sunplus GCC编译器也肯定有这样的宏。举个例子:setvect函数在Borland的实现中就叫setvect,而MS C/C++中却是_dos_setvet。如果你仅仅是简单的用setvect,那你的程序就很可能失去了移植到MS C下的可能。不过如果你这么写:
#if defined( __MSC )
_dos_setvect( 0x09, pgos_timer_handler ) ;
#else
#if defined( __BORLAND_C )
setvect( 0x09, pgos_timer_handler ) ;
#endif
#error Error ! Need MSC or Borland C to compile this programe !
#endif
上面的代码就有很好的可移植性。并且可以在MS和BORLAND的编译器下都正确的工作,并且还能检测出如果的你编译器不是这两种的话,还能给个错误信息并终止编译。这个程序的可移植性很好。
2) 内存对齐与字节序。大多数的不可移植问题似乎都来自内存对齐,所以要避免写出需要内存对齐的或者对字节序有特殊要求的程序。
3) 使用标准的C语言。给大家再介绍一个预定义宏,可以用来检测你的C语言编译器是不是一个标准C编译器:
#if defined( __STDC__ )
// This is a standerd ANSI C compiler
#else
// This is not a standerd C compiler, perhaps K&R C ???
#endif
3) 永远不要使用位域(bit fields)。虽然C支持在结构内申明位,比如:
int ch : 1 ;
但那往往带来的后果就是你的代码成了architecture specific code。也就是说,完全丧失了可移植性。
4) 不要直接使用int。int是魔鬼!在16位系统上,sizeof(int)是2,在32位系统上,却是4。一些依赖于int长度的程序将无法移植,我建议写下面的宏:
#if defined( CPU16 )
typedef int SWORD ;
typedef unsigned int UWORD ;
#else
...
...
#endif
如果觉得这样麻烦,那就用short,它在十六位和三十二位系统上都是2个字节长
如何提高程序的可移植性相关推荐
- java程序移植_java JDBC 提高程序可移植性
介绍jdbc一般的程序: [程序编程相关:jb+oracle+weblogic c] 很多java初学者在开始接触jdbc编程的时候,在网上与大部分的教材上都是这样 [推荐阅读:Java线程入门--什 ...
- [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...
[.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...
- JAVA用多线程反而变慢了_Java中使用多线程不能明显提高程序效率的一些原因
java中使用多线程不能明显提高程序效率的一些原因. 使用多个线程来处理多任务的时候,效率肯定是有提高的.但是必须要慎用,否则容易出现问题. 1.多线程主要是为了充分利用多核cpu,大内存这些资源. ...
- java aix 移植linux,[转]程序的可移植性:window,linux,aix,solaris下程序移植体会
程序的可移植性:window,linux,aix,solaris下程序移植体会 - [工作学习] 1.类型 我们知道,在Windows平台中,系统定义了很多诸如BOOL,CHAR,ULONG,HAND ...
- 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率
程序员区别于其他岗位的一个优势是,我们可以充分利用自己掌握的编程语言,将平日一些琐碎的,重复的日常工作,通过代码来实现自动化,从而省下更多的时间来投入到技术含量更高的工作中,提高工作效率. 本文介绍一 ...
- c# 定位内存快速增长_改善C#程序,提高程序运行效率的50种方法
转自:http://blog.sina.com.cn/s/blog_6f7a7fb501017p8a.html 一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定 ...
- 盘点提高程序员技术的5个免费编程网站,你知道几个?
乔布斯说过,每个人都应该学习给电脑编写程序的技术,因为这一过程能够教你如何去思考.而学习编程的方式有多种多样,你可以通过看书.视频教学的方式学习编程. 对于现在的程序员而言,在编程的过程中必不可缺少的 ...
- 如何提高程序员的生产率 (1)
2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/communit ...
- C++如何提高程序效率
C++如何提高程序效率 程序的时间效率是指运行速度,空间效率是指程序占用内存或者外存的状况. 全局效率是指站在整个系统的角度上考虑的效率,局部效率是指站在模块或函数角度上考虑的效率. [规则11-2- ...
最新文章
- 通达信四色谱四量图源码_翔博精选指标熊市专用优化(通达信公式 选股 源码 测试图)...
- python使用教程pandas-十分钟搞定pandas(入门教程)
- kafka-0.10.2.1:Producer生产时无法自动创建Topic
- 用计算机玩纸牌,《玩“纸牌”游戏》教学设计
- HDFS/zookeeper/hbase初始化
- TexBox.AutoCompleteSource
- CSS3的边框(三)
- android视频通信和web端,探讨用webrtc在手机和浏览器之间实现音视频实时通信的实施环境...
- java字符串深克隆_Java中对象的深复制(深克隆)和浅复制(浅克隆)之序列化...
- 用Python看蜜雪冰城店铺在哪个省份最多~
- 自动化测试和测试开发的区别?培训学哪个更好?
- Java——JVM基本原理
- Android 操作权限大全 (android.permission)
- 教学软件哪个好用,推荐这四个
- 数据结构课程设计- (二) 栈与队列(迷宫问题)
- python 数组的排列与组合:combinations 与 permutations
- 详细解释JavaScript中三元表达式
- mysql查询笔记_MySQL学习笔记(一):查询
- AppScan渗透测试
- 100条养生、养心秘笈,值得一看