编译器 可移植性问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 20:14:53
有一个小问题请教大家:

我编译一个c程序,比如我用的是tc 我的c代码里头用到了tc提供的函数(非c标准)。我用tc编译生成的可执行文件。
我的这个可执行文件是否是可移植的?(只针对我用了tc提供的一个非c标准函数这样一个前提)

我个人认为是:
我用了这个函数,虽然它不是c标准,但是这个函数不依赖特定的系统吧。
既然目标可执行代码已经生成了,说明这个函数的功能包括在目标可执行代码当中,我放到另一个机器上也能执行。

一个例子是:
比如clrscr()清除屏幕函数,这个不是c标准里的。假设我的代码其它部分都遵循c标准,就用了这个一个tc提供的函数。那么是不是我的.exe文件就是移植性不好的程序了?

谢谢大家的回答
非常感谢大家的回答,所以我提高了悬赏分数。
补充一下我的疑惑:
我在书上看到,“如果你使用了非c标准提供的函数,那你要小心这会破坏你程序的可移植性”,我针对的是我使用了非c标准函数(也就是编译器提供的自带函数,其它破坏移植性的因素不考虑)。

我不知道这句话是不是针对不同操作系统说的,如果我的程序充分考虑了移植性,在win系统和linux系统下都能运行。当我只加上一个非c标准函数,比如clrscr()清除屏幕函数,那么我生成的可执行程序还能在其它系统上运行吗?

谢谢!

你用tc编的程序,在windows下面可以运行,tc把它编译成二进制了

只要是windows系统,都能识别该二进制,换了其他的windows系统的电脑,以都能运行的

也就是说,对于windows系统来说,无论你用什么语言,如pascal,delphi,c++,java,只要你编译后生成了可执行文件

把它放到其他windows系统的电脑上,也都可以运行的

但是,就算是同一台电脑,如果你既安装了windows,又安装了linux
你在windows下编译出来的可执行文件,切换到linux系统下,就不能运行了

当然了,如果放在其他的系统上,如手机的symbian系统上,也是不能运行的

补充回答:
生成的二进制文件的移植性,是由操作系统,如windows,linux保证的

而我们说的c语言的移植性,是指c语言源码能否在其他系统上编译
比如我在windows环境下,写了一段c代码,放到linux下,仍然可以编译,这就说明它的移植性很好

所以,要提供c语言的移植性,必须使用标准的c的代码
如果你调用了windows的api,那么在linux下,是无法编译通过的

不是,这是编译和链接的问题,根本不算移植....所以跟移植性也没什么关系

你得知道你用时tc使用了哪些头文件和库文件,知道了就能正确的编译和链接了

移植性:
比如你调用了UNIX体系的pthread_create()函数,或者调用了windows体系的CreateThread()函数,这是两种系统下的接口,这叫移植性问题,你那个本身就是用户库提供的函数,没有什么移植性问题

这么说吧,你用的函数如果是tc提供的用于win32的接口,那么你的程序编译完了,可以在win32上跑,但是不能在别的平台上跑,在别的平台上跑的方法就是把源代码重新编译,但是tc提供的东西别的平台上是没有的,也就是说别的编译器是不支持的。所以就叫不可移植,除非你用其他平台的接口重新实现该接口,则叫把他一直到该平台。如果要程序移植性好,最好都用ans