为什么说C程序的可移植性很好?
一般每当说到C在上个世纪七、八十年代流行至今的主要原因之一必有其可移植性。我的理解是用C开发的程序的可移植性很好而不是C语言本身(或者C编译器);这样就带来一个问题,在DOS下的用C写的程序里难道就没有DOS的系统功能调用吗?或者C自带的函数库里的函数就没有用到DOS的系统功能吗?如果有其可移植性又怎么保证?
问题点数:20、回复次数:32Top
1 楼truewill(无处不在)回复于 2005-10-03 10:17:00 得分 4
这个应该是相对一些老语言而言的吧,比如basic这些
说他移植性好是因为#define和typedef可以适应不同平台
写得好的话,拿到不同平台重新编译一次就ok了,库的话,不同平台有自己的,但格式是一样的
写得不好的话(如楼主所言,嵌入了汇编或类型的长度没有设计好),移植的时候就辛苦了
一家所言,仅供参考Top
2 楼jixingzhong(瞌睡虫·星辰)回复于 2005-10-03 10:42:46 得分 0
标准Top
3 楼jixingzhong(瞌睡虫·星辰)回复于 2005-10-03 10:44:26 得分 0
2 :
C 做的很多是底层, 而底层的底层的实现对于不同平台是一致的Top
4 楼qlmi(大米)回复于 2005-10-03 10:59:22 得分 0
为什么嵌入了汇编,移植的时候就比较辛苦了!Top
5 楼K()回复于 2005-10-03 11:09:58 得分 0
前提是符合标准Top
6 楼agaric(蘑菇星星)回复于 2005-10-04 01:01:03 得分 0
因为会提供标准的库函数接口而已Top
7 楼lindex(this)回复于 2005-10-05 16:57:05 得分 0
因为主流的操作系统都内置有c语言的编译器,如果不是涉及到目标操作系统的系统调用,那么由c语言编制的代码是可以移植的。像如果用到了win32的平台sdk里头的函数诸如NetUserGetInfo这样的函数调用,那么就不能移植到linux/unix平台了。Top
8 楼nasi00(莫傲·逍遥)回复于 2005-10-05 17:37:16 得分 0
个人觉得可移植性好不好更主要的还是在于程序本身,并不在语言上...Top
9 楼qlmi(大米)回复于 2005-10-06 12:09:40 得分 0
昨天又翻出了谭浩强老师写得《C程序设计》,里面在谈到C语言的优点是提到:用c语言写的程序可移植性好(与汇编语言比)。基本上不作修改就能用于各种型号的计算机和各种操作系统。我还是不明白,为什么与汇编语言相比,C语言写的程序可移植性就好了呢?Top
10 楼prostar(坚决与不规范的程序风格做最顽强的斗争)回复于 2005-10-06 12:56:33 得分 0
可以这么说吧:
C is best high level language that best fit for the NATURE modern computer architecture
这么说是有历史原因的,C来自于B语言。B语言的精华就是完全参照诺依曼体系结构实现的语言,所以C也就继承了B的这种特点,想想C的指针,就语言本身而说,能够将现代计算机体系结构表达的如此清楚,不得不叫人叫绝!
所以就语言本身而说,C是最易实现以及移植的。但是就表达方式而言,由于程序员本身的水平的差异,写出不可移植的代码那就不能怪罪于语言本身。Top
11 楼ckp(surge)回复于 2005-10-06 13:21:42 得分 0
C语言,在各个平台上,都有相应的C/C++编译器。
相对于其他语言来说,C语言的移植性和通用性要好得多。
当然,现在的Java,由于只有一家公司Sun生产编译器,通用性更好。
但是,C/C++较适合搞底层的开发。程序的运行效率最高。所以,迄今为止,C/C++还是一种通用的移植性高的高级语言。
而且,C/C++,你只要尽量使用标准的库函数。移植起来,应该还是很方便的。]
此外,C/C++还有许多源代码。可以利用。而Delphi,Java,C#的源代码,相对于C/C++来说,要少的多了。Top
12 楼bsn007(小李飞车)回复于 2005-10-07 19:16:42 得分 0
有这样一个小间题:printf("要求和结果是=%d",sum);请间如何在运行后能在显示器中年历到如下结果:
要求的对路果是:Top
13 楼Efficogitor()回复于 2005-10-07 19:27:46 得分 0
1 相对于高级因为C是标准,很多平台都支持C(操作系统)
2 相对于汇编等低级语言而言,因为汇编是与CPU相关的,比如说AMD的处理器支持的指令集和INTEL的处理器就很不一样,所以C的移植性要好 (硬件平台)Top
14 楼tb01412(tb)回复于 2005-10-07 19:32:52 得分 0
C语言由于形成了一个所谓的C99标准,只要你完全遵循这个标准写程序,并且不要用汇编的话,那么在其它平台下的C语言编译器普遍支持这个标准的,这个针对不同平台进行移植的工作更多的是编译器和它所提供的标准C库所做了,所以程序员本身要做的工作就少了些,这就是为何C语言移植性好的原因
当然完全用标准C语言所做的事情相对要少很多,必须要结合操作系统来实现功能,比如要使用多线程,这只有使用操作系统提供的接口才能实现,这时的可移植性就取决写程序的人了
相对其它语言,除了JAVA,没有更具移植性的了,这就像英语一样,它的通用性极好,因为很多国家都说英语啊,而且很多国家都用英语作第二语言,这个道理就跟C语言的移植性的道理一样Top
15 楼crcr(游侠)回复于 2005-10-08 20:23:01 得分 0
语言由于形成了一个所谓的C99标准,只要你完全遵循这个标准写程序,并且不要用汇编的话,那么在其它平台下的C语言编译器普遍支持这个标准的,这个针对不同平台进行移植的工作更多的是编译器和它所提供的标准C库所做了,所以程序员本身要做的工作就少了些,这就是为何C语言移植性好的原因
当然完全用标准C语言所做的事情相对要少很多,必须要结合操作系统来实现功能,比如要使用多线程,这只有使用操作系统提供的接口才能实现,这时的可移植性就取决写程序的人了
相对其它语言,除了JAVA,没有更具移植性的了,这就像英语一样,它的通用性极好,因为很多国家都说英语啊,而且很多国家都用英语作第二语言,这个道理就跟C语言的移植性的道理一样
Top
16 楼kittig(Never & Ever)回复于 2005-10-08 21:05:53 得分 4
是代码的移植性好,不是编译好的程序。Top
17 楼zquboy()回复于 2005-10-09 01:11:22 得分 0
不在乎C本身或C程序。
用的人多了(普及)自然就是标准了。标准化的东西,可移植性自然好了。
Top
18 楼haozhangr(Pure C)回复于 2005-10-09 02:20:01 得分 0
因为C语言本身是平台无关的,而I/O又通库函数实现了Top
19 楼liuhaimiao()回复于 2005-10-09 09:21:08 得分 0
个人认为主要是Top
20 楼captainivy(Ivy)回复于 2005-10-17 00:31:43 得分 0
对,是标准
用标准库开发的c代码,分别经过编译,在一般的平台上都可以运行(指的Windows和Unix/Linux)。Top
21 楼qinxiaogang(qinxg)回复于 2005-10-18 14:42:12 得分 0
因为几乎所有的平台都有各自的'c'编译器.具体的细节由编译器处理了Top
22 楼cqpp()回复于 2005-10-18 17:25:39 得分 4
有看过ARM上和8086上汇编的差异有多大吗?如果用C整个工程只改一点点就可以在两种机器上跑了Top
23 楼qlmi(大米)回复于 2005-10-21 22:00:17 得分 0
cqpp老兄,如你所说:有看过ARM上和8086上汇编的差异有多大吗?如果用C整个工程只改一点点就可以在两种机器上跑了。我没有那么多见识和知识,请问你能否说的详细一些呢?或者你是怎么理解这个问题的呢?Top
24 楼qlmi(大米)回复于 2005-10-22 14:21:25 得分 0
给点提示吧!Top
25 楼qlmi(大米)回复于 2005-10-22 14:37:08 得分 0
cqpp老兄,你的提示给了我一个直接的答案,但是我还不能从深层次来理解,请不吝赐教!Top
26 楼minrr(平平淡淡)回复于 2005-10-22 16:44:45 得分 0
C可以在多种平台上写吧
Top
27 楼YFY(天易)回复于 2005-10-22 21:41:38 得分 0
用C的标准库中定义的函数啊,不进行系统调用,只要每个编译器提供的C标准库函数的接口定义是一样的,在不通的平台上有不通的编译器提供商,这样移植性就好了.
如果调用了特定系统提供的API,那么移植性自然就差了.Top
28 楼Wolf0403(废人:独活十年~心如刀割)回复于 2005-10-23 12:56:44 得分 4
说 C 的可移植性不能脱离 Unix 和 POSIX 来说。谭老说得很清楚了,『用c语言写的程序可移植性好(与汇编语言比)。』——“与汇编语言相比”。
70年代,C 语言和 Unix 诞生之前,各种硬件供应商都会为自己的硬件架构提供专有的系统和汇编语言。因为硬件设计的不同,汇编语言之间的差距是不可避免的。为一台机器写的程序根本无法为另一台机器所用(除了完全重写之外)。后来,当 Unix 系统和 C 编译器分别在这些平台上得到实现之后,用 C 写程序就可以不再考虑特定硬件平台的指令集等信息,只要写出可以编译的 C 程序,利用了 Unix 系统的服务,在这些平台上的 Unix 系统中就一定可以直接使用(重新编译后)。而且,在 Unix 发生了分裂之后,又推出了 POSIX 标准和 Single Unix Specification 用于统一 Unix 平台的程序 API,因此一个遵循这些标准的 C 程序,在遵循这些标准的 Unix 平台上是可以移植的。Top
29 楼qlmi(大米)回复于 2005-10-23 13:01:34 得分 0
那对于汇编语言来说不同的平台也可以有不同的编译器呀,这样移植性不是也就提高了?Top
30 楼Leomaxking(害怕孤独,但已习惯孤独)回复于 2005-10-23 13:30:59 得分 4
对于汇编来说不同平台有不同的指令集,即使有不同的编译器其中的指令甚至程序架构也是不一样的,这样就相当于要把整个程序重写,所以说汇编不具有多少可移植性。
而C因为经过很多年的发展不断地完善补充,有了一整套的规范,而且本身不依赖于硬件指令,所以说它的可移植性要高。。。Top
31 楼qlmi(大米)回复于 2005-10-23 16:30:26 得分 0
那BASIC和PASAL语言不也不依赖于硬件指令吗,那为什么他们的可移植性又怎么样呢?Top
32 楼Wolf0403(废人:独活十年~心如刀割)回复于 2005-10-23 17:25:08 得分 0
http://ibis.nott.ac.uk/guidelines/ch4/chap4-C.html
基本上,除了汇编之外的变成语言都属于 portable 的……而抽象层次越高,离操作系统、硬件细节越远的,可移植性越好。Top




