社区
C语言 帖子详情 为什么说C程序的可移植性很好? qlmi 2005-10-03 10:10:35 一般每当说到C在上个世纪七、八十年代流行至今的主要原因之一必有其可移植性。我的理解是用C开发的程序的可移植性很好而不是C语言本身(或者C编译器);这样就带来一个问题,在DOS下的用C写的程序里难道就没有DOS的系统功能调用吗?或者C自带的函数库里的函数就没有用到DOS的系统功能吗?如果有其可移植性又怎么保证?
...全文
3715 32 打赏 收藏 为什么说C程序的可移植性很好? 一般每当说到C在上个世纪七、八十年代流行至今的主要原因之一必有其可移植性。我的理解是用C开发的程序的可移植性很好而不是C语言本身(或者C编译器);这样就带来一个问题,在DOS下的用C写的程序里难道就没有DOS的系统功能调用吗?或者C自带的函数库里的函数就没有用到DOS的系统功能吗?如果有其可移植性又怎么保证? 复制链接
扫一扫 分享 转发到动态 举报 AI 作业
写回复 配置赞助广告取 消
确 定
用AI写文章 32 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 Wolf0403 2005-10-23 打赏举报 回复 说 C 的可移植性不能脱离 Unix 和 POSIX 来说。谭老说得很清楚了,『用c语言写的程序可移植性好(与汇编语言比)。』——“与汇编语言相比”。
70年代,C 语言和 Unix 诞生之前,各种硬件供应商都会为自己的硬件架构提供专有的系统和汇编语言。因为硬件设计的不同,汇编语言之间的差距是不可避免的。为一台机器写的程序根本无法为另一台机器所用(除了完全重写之外)。后来,当 Unix 系统和 C 编译器分别在这些平台上得到实现之后,用 C 写程序就可以不再考虑特定硬件平台的指令集等信息,只要写出可以编译的 C 程序,利用了 Unix 系统的服务,在这些平台上的 Unix 系统中就一定可以直接使用(重新编译后)。而且,在 Unix 发生了分裂之后,又推出了 POSIX 标准和 Single Unix Specification 用于统一 Unix 平台的程序 API,因此一个遵循这些标准的 C 程序,在遵循这些标准的 Unix 平台上是可以移植的。 Wolf0403 2005-10-23 打赏举报 回复 http://ibis.nott.ac.uk/guidelines/ch4/chap4-C.html
基本上,除了汇编之外的变成语言都属于 portable 的……而抽象层次越高,离操作系统、硬件细节越远的,可移植性越好。 qlmi 2005-10-23 打赏举报 回复 那BASIC和PASAL语言不也不依赖于硬件指令吗,那为什么他们的可移植性又怎么样呢? Leomaxking 2005-10-23 打赏举报 回复 对于汇编来说不同平台有不同的指令集,即使有不同的编译器其中的指令甚至程序架构也是不一样的,这样就相当于要把整个程序重写,所以说汇编不具有多少可移植性。
而C因为经过很多年的发展不断地完善补充,有了一整套的规范,而且本身不依赖于硬件指令,所以说它的可移植性要高。。。 qlmi 2005-10-23 打赏举报 回复 那对于汇编语言来说不同的平台也可以有不同的编译器呀,这样移植性不是也就提高了? YFY 2005-10-22 打赏举报 回复 用C的标准库中定义的函数啊,不进行系统调用,只要每个编译器提供的C标准库函数的接口定义是一样的,在不通的平台上有不通的编译器提供商,这样移植性就好了.
如果调用了特定系统提供的API,那么移植性自然就差了. minrr 2005-10-22 打赏举报 回复 C可以在多种平台上写吧
qlmi 2005-10-22 打赏举报 回复 cqpp老兄,你的提示给了我一个直接的答案,但是我还不能从深层次来理解,请不吝赐教! qlmi 2005-10-22 打赏举报 回复 给点提示吧! qlmi 2005-10-21 打赏举报 回复 cqpp老兄,如你所说:有看过ARM上和8086上汇编的差异有多大吗?如果用C整个工程只改一点点就可以在两种机器上跑了。我没有那么多见识和知识,请问你能否说的详细一些呢?或者你是怎么理解这个问题的呢? cqpp 2005-10-18 打赏举报 回复 有看过ARM上和8086上汇编的差异有多大吗?如果用C整个工程只改一点点就可以在两种机器上跑了 qinxiaogang 2005-10-18 打赏举报 回复 因为几乎所有的平台都有各自的'c'编译器.具体的细节由编译器处理了 captainivy 2005-10-17 打赏举报 回复 对,是标准
用标准库开发的c代码,分别经过编译,在一般的平台上都可以运行(指的Windows和Unix/Linux)。 沙敦府上帝发誓地方 2005-10-09 打赏举报 回复 个人认为主要是 haozhangr 2005-10-09 打赏举报 回复 因为C语言本身是平台无关的,而I/O又通库函数实现了 zquboy 2005-10-09 打赏举报 回复 不在乎C本身或C程序。
用的人多了(普及)自然就是标准了。标准化的东西,可移植性自然好了。
kittig 2005-10-08 打赏举报 回复 是代码的移植性好,不是编译好的程序。 数据结构与算法学习、智能算法 2005-10-08 打赏举报 回复 语言由于形成了一个所谓的C99标准,只要你完全遵循这个标准写程序,并且不要用汇编的话,那么在其它平台下的C语言编译器普遍支持这个标准的,这个针对不同平台进行移植的工作更多的是编译器和它所提供的标准C库所做了,所以程序员本身要做的工作就少了些,这就是为何C语言移植性好的原因
当然完全用标准C语言所做的事情相对要少很多,必须要结合操作系统来实现功能,比如要使用多线程,这只有使用操作系统提供的接口才能实现,这时的可移植性就取决写程序的人了
相对其它语言,除了JAVA,没有更具移植性的了,这就像英语一样,它的通用性极好,因为很多国家都说英语啊,而且很多国家都用英语作第二语言,这个道理就跟C语言的移植性的道理一样
tb01412 2005-10-07 打赏举报 回复 C语言由于形成了一个所谓的C99标准,只要你完全遵循这个标准写程序,并且不要用汇编的话,那么在其它平台下的C语言编译器普遍支持这个标准的,这个针对不同平台进行移植的工作更多的是编译器和它所提供的标准C库所做了,所以程序员本身要做的工作就少了些,这就是为何C语言移植性好的原因
当然完全用标准C语言所做的事情相对要少很多,必须要结合操作系统来实现功能,比如要使用多线程,这只有使用操作系统提供的接口才能实现,这时的可移植性就取决写程序的人了
相对其它语言,除了JAVA,没有更具移植性的了,这就像英语一样,它的通用性极好,因为很多国家都说英语啊,而且很多国家都用英语作第二语言,这个道理就跟C语言的移植性的道理一样 Efficogitor 2005-10-07 打赏举报 回复 1 相对于高级因为C是标准,很多平台都支持C(操作系统)
2 相对于汇编等低级语言而言,因为汇编是与CPU相关的,比如说AMD的处理器支持的指令集和INTEL的处理器就很不一样,所以C的移植性要好 (硬件平台) 加载更多回复(12) c语言可移植性较差吗,c陷阱与缺陷--可移植性缺陷 引入c语言是比较底层的语言,相对于c++和java等高级语言而言。c语言在许多不同的系统平台上都有各自的实现,由于各自的实现之间有细微的差别,导致了如今的移植性问题。在书中说到,由于程序的生命期一般比硬件更长,所以应该注意语言自身的可移植性。但时至今天,这个说法或许需要更正了。但作者的原意在于,注意可移植性问题可以使你的程序生命期更长,可施展的空间更大。一c语言标准的变更c语言标准的变更使得语言... 为什么C语言是可移植性语言?如何理解C语言的未定义行为?C语言有哪些标准?abort和exit退出程序有什么不同? C语言自由灵活,未定义行为其实是标准对实现的放宽,即,一种行为如果可能产生错误,那标准不必要规定会有什么错,是内存泄漏、程序终止或者其他诡异的行为,只需要提示此行为未定义,具体交给实现。这种做法是标准甩锅的行为,也是标准很理性的行为。更加安全的编程语言,如Java/C#都尽可能规避未定义行为,因为异常将会在预期中抛出。 c编程可移植性考虑 概述
为了缩短开发过程、降低开发成本,我们提倡软件复用。软件复用中常见的一个场景就是在不同产品或平台上使用同一套代码。这里就引入一个软件可移植性的概念。广义上来说,软件的可移植性是指软件从某一环境转移到另一环境下的难易程度。这里的环境可能是不同的硬件、软件……
在本文中,可移植性特指从C语言角度而言,具体是指同一功能的C语言程序代码从某一平台(设备)移植到其他平台(设备)... 程序的可移植性
编程语言的可移植性意味着,用一种编程语言在一个系统上编写的程序经过很少改动或者不经修改就可以在其他系统平台上运行。
要想了解可移植性必须要知道:1.什么是程序?2.什么是系统平台?
什么是程序
首先,我们得知道程序的本质是什么?程序的本质就是一连串能被CPU识别并执行的有0、1代码组成的指令即目标代码(0、1组成的代码)。不同类型的CPU指令集是不同的,相同的一段0、... 用C语言编写的程序可移植性,c++ 程序可移植性 测试这是一个必要的但不是足够的条件做任何正确的事情。为了测试可移植性,您将需要多个平台和编译器。2.写标准,而不是你的开发平台。这意味着,只有在标准说你可以做的时候,才做某事。只有在标准说你可以期待的时候才会有特别的结果。如果标准说存在,只能使用库或API。标准在这里(除了其他地方)可用:如果你假设:> CHAR_BIT等于9。> sizeof(int)等于5,int是37位类型。或1...
C语言
70,023
社区成员
243,263
社区内容
发帖 与我相关 我的任务 C语言 C语言相关问题讨论 复制链接
扫一扫 分享 确定 社区描述 C语言相关问题讨论 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告 试试用AI创作助手写篇文章吧
+ 用AI写文章