原来,一直不太明白这样一个问题:既然c语言是一种相对高级的语言,应该用c语言写出的东西,经过编译器编译就可在任意机器上运行。
我今天试了一下在linux下编译的c语言在windows下运行,但是都提示错误。
然后去网上查了一些资料,事实上如果你编写的程序全是汇编或者纯c语言,没有用到任何第三方软件或者和操作系统有关的库函数,那么你编译完后,可以在同等硬件上执行。当然,你编译的时候必须编译成硬件认识的指令。【即必须使用相应的编译器】。
但,事实上我们平常用c语言写的一些应用程序会或多或少使用一些某些系统特有的函数库。
这是因为ANSI C是C语言的标准,但ANSI C几乎很难完成复杂程序的开发。任何C语言的编译器都在ANSI C的基础上扩充, 如TC,VC等都对ANSI C进行了扩充,加入了自己的规则和库之类的。所以他们之间一般不具有通用性。此外在各个操作系统上的应用程序通常要调用相应的操作系统提供的借口,这也为代码的跨平台建立了一层障碍。
下面说一下什么是库函数:
库函数是编译器带的一些函数,
操作系统提供最底层的系统调用,而库函数是对这些系统调用的封装。
因此,c语言是一种和硬件无关的语言,编译成在那个平台上运行的程序这件事是由编译器干的。程序设计者不用考虑这些问题。
还有就是,我们为了提高程序开发效率,我们开发的程序一般在操作系统上跑,所以我们在编写时用了一些其他别人编写好的针对特殊系统的库函数。这样,就无意中限制了c语言的快平台性。
嘻嘻,我的简单理解就是这样。有什么不对的,希望大家指点。