半点优化网 http://www.bdxc.net/
当前位置首页 > 网站技术问题> 正文

c语言为什么能跨平台或是如何跨平台的?

2022-05-11 10:00:27 暂无评论 141 网站技术问题 跨平台   或是   语言

c语言能跨平台是因为各个平台有相应的c编译器,只要源代码相同,编译器编译出来的二进制文件就会实现相同的功能,但是这些二进制文件本身是不一样的exe就是2进制的,但不完全是原来程序的代码,还包括了windows系统的一些代码科普一下,C最早是出现在Unix下的,Windows那都是后话了,C出现的时候Windows还没开发出来呢。C有个比较特别的称呼,叫中级语言,因为它有高级语言的特性又能跟底层硬件很好的交互所以才有这么个说法。DOS时代在C里面嵌上一段汇编直接从并口读个数上来那是很流行的,现在没见谁在VC里面这么干吧。Windows也不让啊。想访问硬件怎么也得通过驱动。说远了,C在多种平台下可以实现代码级的共享,跨平台就需要重新编译了。但是,我也见过有的软件是可以在多种平台上运行了,可能有什么特别的技术,可以先识别一下操作系统,再运行相应的代码。这个应该是在编译的时候有特殊的技巧。C编译、连接器网上有现成的代码,一般不是很专业的技术人员没有去研究它。我一直把玩编译原理的视为天人,有能力把编译原理那本书看完的就很不容易了,再要能领会其中精要那就成才了,能把龙书虎书鲸书都搞明白的那就是一流专家了。

C语言肯定不能跨平台的,他只能获得“源代码级的可移植性”,因为不同类型或版本的机器其指令集是不同的,我们不能保证C等高级语言在一台机器上生成的可执行程序能完全在另外一台机器上运行,因为可能这台机器上生成的可执行程序中用到了另外一台机器中未曾有的指令(格式),但是在源代码级上,C还是具有移植性的,当然移植是,我们可能还是需要修改代码的,因为不同操作系统他们提供的API不一样,不同编译器的编译方式也是有所差别。 在说为什么java能跨平台,本质上是由于他在每个机器上都装了“与该类型机器对应的虚拟机”,而java编译器生成的是一种中间代码(即字节码),这种中间代码是与具体机器无关的,他完全是java设计者为了让java能跨平台而设计的,这种字节码最后由虚拟机解释成该机器上的指令,这样只要保证每种类型的机器都有对应的虚拟机,那么我们就能让java完全跨平台。

猜你喜欢