关于C语言编译器和操作系统之间的关系

C语言答疑课堂 2017-01-13 05:36:09
我在我自己的电脑上下载了一个编译器,然后写了一个C程序,用编译器编译并且我的程序能正常运行。我的问题就是,我下载的编译器把我的程序编译成机器目标代码,它怎么知道编译出适合我电脑的机器代码呢?
是不是编译器在编译的时候先问下我的电脑支持什么样的目标代码?如果每次编译之前都要获取我的电脑支持什么样的目标代码,那么编译器本身就要考虑很多适配很多类型的电脑硬件咯?
...全文
480 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-15
  • 打赏
  • 举报
回复
就是gcc源代码和linux源代码之间的关系。
threenewbee 2017-01-13
  • 打赏
  • 举报
回复
再比如说,一些设备,比如手机、手表、控制终端,你给它们编程,你的程序难道是在这些设备上编写的, 还是说这些设备里都要安装和你开发计算机一样的硬件?
threenewbee 2017-01-13
  • 打赏
  • 举报
回复
编译器不关心你的机器,再说,你开发软件,难道你只希望它在你的机器运行?你的客户的计算机呢?
ooolinux 2017-01-13
  • 打赏
  • 举报
回复
引用 3 楼 u010165006 的回复:
你用Windows系统就用这个平台的编译器,如果是gcc也是Windows平台的修改版。 用Linux系统可以用gcc。 好比你用安卓手机不能下载原版苹果的应用。
还有交叉编译的,比如可以在Windows平台编译出Linux平台的目标代码,但是执行也需要在Linux平台。
ipqtjmqj 2017-01-13
  • 打赏
  • 举报
回复
编译器在不同的CPU与操作系统上是不同的。 一般的PC都是x86架构,Windows操作系统,网上的编译器没有说明就是针对这个配置
ooolinux 2017-01-13
  • 打赏
  • 举报
回复
你用Windows系统就用这个平台的编译器,如果是gcc也是Windows平台的修改版。 用Linux系统可以用gcc。 好比你用安卓手机不能下载原版苹果的应用。
yes-hyh 2017-01-13
  • 打赏
  • 举报
回复
可以这样理解,编译器生成目标代码考虑的平台问题一般就cpu指令集以及操作系统的pe文件格式。根据这些就可以排列组合成不同的版本
yes-hyh 2017-01-13
  • 打赏
  • 举报
回复
每个编译器都不一样,看具体实现。 但是一般不是编译器询问操作系统支持什么目标代码,而是一款编译器针对不同环境实现了不同的方案。可以把多种方案集成到一起,根据配置或者参数确定输出pe的格式。也可以每一种方案搞成一种版本,也就是一个版本固定输出某种环境的,然后你下载的时候可以选择诸如windows版、linux版等等这样不同的版本。 楼主下载的编译器是针对自身运行生成目标代码,如果你是windows,就是说编译器程序本身是windows的pe格式,本生只能运行于windows,那么它也默认生成windows的代码。也许你可以通过参数,让其输出其他平台的代码。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧