c语言能跨平台是因为各个平台有相应的c编译器,只要源代码相同,编译器编译消盯出来的二进制文件就会实现相同的功能,但是这些二进制文件本身是不一样的。
exe就是2进制的,但不完全是原来程序的代码,还包括了windows系统的一些代码。
科普一下,C最早是出雀颤现在Unix下的,Windows那都是后话了,C出现的时候Windows还没开发出来呢。
C有个比较特别的称呼,叫中级语言,因为它有高级语言的特性又能跟底层硬件很好的交互所以才有这么个说法。DOS时代在C里面嵌上一段汇编直接从并口读个数上来那是很流行的,现在没见谁在VC里面这么干吧。Windows也不让啊。想访问硬件怎么也得通过驱动。
C在多种平台下可以实现代码级的共享,跨平台就需要重新编译了。
但是,我也见过有的软件是可以在多种平台上运行了,可能有什么特别的技术,可以先识别一下 *** 作系统,再运行相应的代码。这个应该是在编译的时候有特殊的技巧。
C编译、拿岁和连接器网上有现成的代码,一般不是很专业的技术人员没有去研究它。我一直把玩编译原理的视为天人,有能力把编译原理那本书看完的就很不容易了,再要能领会其中精要那就成才了,能把龙书虎书鲸书都搞明白的那就是一流专家了。
跨平台,或者平台无关,是指程序代码在不同环境下具有完全相同的预期功能,可让樱轮以互相替换。C语言的跨平台一般含义是:在指定的硬件和软件平台下能够正常编译的C语言源代码,在代码满足一定跨平台性的要求后,无需修改即可在另一硬件或软件下编译生成目标文件。这样,源代码是跨平台的。目标代码一般都是对应平台的本地代码,不能跨平台(例如颂燃.obj和.elf就不能直接混用;Windows和Linux上的可执行文件一般也不互坦信相兼容)。C语言程序跨平台的实现必需编译环境的支持。对于库,提供源文件,或者提供不同平台下对应编译环境支持的目标文件(例如.lib/.a),可以实现跨平台开发。无法跨平台的部分,是平台相关的接口(例如一些 *** 作系统API),库通过实现一定的兼容层可以克服平台障碍(前提是硬件支持)。注意C语言的标准库在任何支持相同版本标准上的平台上的行为都是一致的(除了标准定义implemention defined或者undefined的部分,这些部分应该尽量避免使用),是跨平台的;同其它跨平台库一样,是实现跨平台开发的有力用具。在Win/Linux下进行跨平台开发,编译器主要用GCC;可以使用经过配置的MinGW、Cygwin环境;跨平台GUI开发可以考虑wxWidgets等库。至于Java,它事实上就是一个平台(JVM,Java虚拟机),所谓的“一次编译,到处执行”的跨平台支持是通过不同的Java编译器和JVM来实现的。Java程序的源代码和目标代码都可以跨平台。但是不同的JVM可能实现了不同的特定功能,基于特定功能的部分无法保证跨平台。此外,native的本机代码和JVM之外的平台相关,和C一样,也无法保证跨平台。
标准C和标准C++都是源代码级跨平台的,nbsp也就是说你用标准腔卖C/C++写的代码在windows下编译后就可以windows下伍神逗运行,nbsp在unix/linux下编译后就可以在unix/linux下运行.跨硬件平台是靠编译器的,比如要输出一个字符,C里用printf(“C“)硬件瞎档平台a用中断A输出,nbsp硬件b用中断B输出,nbsp那么就得有两个不同的编译器,nbsp它们都用不同的方法实现C的功能欢迎分享,转载请注明来源:内存溢出
评论列表(0条)