C语言代码编译成的是机器码,那么怎么实现可移植性呢?

2025-02-25 15:35:34
推荐回答(5个)
回答1:

可移植指的不是编译好的文件可移植。不同的平台(不同的cpu或操作系统)中有不同的编译器,这些编译器在不同平台中把同样的一份源码编译成对应此平台的二进制文件就实现了移植。当然也不一定就编译成最底层的代码,也可能编译成特定平台虚拟机可以运行的中间代码。如java这种语言,在不同平台上实现虚拟机,针对虚拟机编译就可以实现可移植(当然c代码的编译一般是直接针对硬件的)。
只要编译器足够强大,在一个平台上就可以编译出另一个平台可用的二进制文件。说到底无非是把你的源码“翻译成”特定平台能认识的另一堆代码。

回答2:

C语言的可移植性不是体现在生成的2进制文件上面,而是体现在源代码级别的,只要重新编译就能运行。
一是,因为大部分系统都实现了C的标准运行库。
二是,它对机器指令进行了抽象。用if,for等语句代替了多条机器指令。

像汇编这种就不太可移植的,它一条语句对应一条机器指令,不同CPU支持的指令集是不完全一样的。

回答3:

C语言写的代码编译成了机器码,与编译器有关,与当前的电脑的CPU没有关系

有个概念叫交叉编译,我们做嵌入式的,就靠这个工作了
也就是在PC上编译的机器码,下载到其他的芯片里面,让它在这个芯片里运行

只要其他的电脑也支持同样的编译器产生的机器码,就可以一致到它上面

回答4:

C语言代码编译成的是机器码,通常不能在不同指令系统的机器上运行。

我遇到过同样的机器,同样的机器码,同样的操作系统,也就是原来在本机编好的若干程序,突然运行不了了(出错),必须重新编译后才能运行。因为微软动态链接库里的子程序号码“更新”了。

如果编译成半成品机器码,或者类似obj,到运行的机器上再由附加的解释器解释(或编译器链接),则可以运行。这就是所谓的“跨平台”“移植”“嵌入”。

回答5:

与CPU的架构和OS有关系