C语言到底有没有跨平台性?

Python014

C语言到底有没有跨平台性?,第1张

C语言本来就是跨平台的,不过是“源码级”跨平台。本来就是存在针对linux、windows的不同的编译器。所以有C语言“一次编写,到处编译”,Java是“一次编译,到处运行”的说法。如C++创始人酸溜溜的说法,JVM造了一个新的平台,让所有Java程序只能在这个平台上运行,而C和C++的代码可以在几十个不同的平台上运行,从这个角度而言,C和C++是跨平台的,而Java不是

c语言能跨平台是因为各个平台有相应的c编译器,只要源代码相同,编译器编译出来的二进制文件就会实现相同的功能,但是这些二进制文件本身是不一样的。

exe就是2进制的,但不完全是原来程序的代码,还包括了windows系统的一些代码。

科普一下,C最早是出现在Unix下的,Windows那都是后话了,C出现的时候Windows还没开发出来呢。

C有个比较特别的称呼,叫中级语言,因为它有高级语言的特性又能跟底层硬件很好的交互所以才有这么个说法。DOS时代在C里面嵌上一段汇编直接从并口读个数上来那是很流行的,现在没见谁在VC里面这么干吧。Windows也不让啊。想访问硬件怎么也得通过驱动。

C在多种平台下可以实现代码级的共享,跨平台就需要重新编译了。

但是,我也见过有的软件是可以在多种平台上运行了,可能有什么特别的技术,可以先识别一下操作系统,再运行相应的代码。这个应该是在编译的时候有特殊的技巧。

C编译、连接器网上有现成的代码,一般不是很专业的技术人员没有去研究它。我一直把玩编译原理的视为天人,有能力把编译原理那本书看完的就很不容易了,再要能领会其中精要那就成才了,能把龙书虎书鲸书都搞明白的那就是一流专家了。

回答可以说是也不是。

C的源代码是跨平台的而编译后的目标文件和可执行文件就不是跨平台的。

因为针对不同的平台会用不同的编译器来编译和链接同样的源代码。

当然如果你的代码里有针对某种特定平台的代码的话(比如Windows API调用),那么用针对其它平台的编译器就会出错。

一般来说如果想写真正跨平台的源代码会用#define 来实现有条件的编译。