当前位置:首页 » 编程软件 » gcc编译原理

gcc编译原理

发布时间: 2022-02-17 11:08:18

1. c语言编译原理是什么

编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。

1、预处理阶段:

主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)

2、汇编阶段:

插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。

3、编译阶段:

将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。

4、链接阶段:

在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。

2. gcc是开源的吧代码是用什么写的汇编么

gcc官方网站 http://gcc.gnu.org/
关于gcc的信息可以自己找到,源代码也可以下到(不过官方下载有点费劲)。gcc也是用C语言写的。

3. 关于C语言的编译过程,GCC与windows下的c编译器(如VS2010)的编译过程是否存在区别

一般的编译步骤是如此, 但也有一步到位的编译器

4. 关于编译原理的问题

1.当然是机器语言了,如果是汇编指令,那还得编译一次!能运行的程序都是机器语言,只有机器语言才能控制CPU,NET或Java这些中间语言,程序在运行时会被CLR或JVM快速编译成机器语言,因此这些程序速度上有损失。

高级语言源代码(文本)-通过编译器(compiler)-程序(二进制机器语言)
汇编代码(文本)-通过汇编器(assembler)-程序(二进制语言)

看到这里,你可能会想那汇编语言到底有什么用呢,编译器完全能代替汇编啊?
(1).编译器是通过高级语言(c,c++)转到机器语言的。转换过的机器语言受限与高级语言,效率和功能上都有限制。比如c不等过分操作内存。但通过汇编器转化过来的机器语言,效率高,且用汇编语言,直接和CPU对话!
(2).汇编可以反汇编(逆向编译),而这里高级语言没有发言权,就是:
程序(二进制机器语言)-通过反汇编器(compiler)-可转化为汇编代码(文本)
但永远不能转化为高级语言的源代码,。
以上两点汇编存在的重要性。

2。当然是说移植源代码。windows用x86机器语言,苹果用powerPC机器语言,windows程序当然不能运行在苹果机上,因为程序其实就是一串机器语言!但windows上有c的编译器(vc++),苹果机上也有c编译器(gcc),因此同一个c的源代码,当然就可以通过不同平台的同一种编译器实现平台移植。

3.当然是NASM,我看的所有书都首先说NASM,他是开源的,就像linux一样,很受欢迎,还有MASN是微软的,borland的也有汇编器,不过都不常见了。

4.这跟CPU有关,一般32位x86兼容的cpu有许多寄存器,多数是32位的,也有16位的。比如CS,ES,DS这些segment寄存器一直是16位的。

5.优势太多了,这和32位和16位存在的优势一样,16位电脑最大内存1MB,寄存器都是16位的。32位,最大内存可以有4GB,整整是16位的4096倍啊!16位多渺小啊,同理64位基本上也可以蔑视32位,64内存最大内存用TB来衡量,寄存器多数是64位!地址总线也是64位。64对32位没有什么优势劣势可言,64位完全就是32位的下一代。

5. 编译原理 中间代码生成 的程序求一个

在网上找了半天,抱歉只找到了GCC的源码

源码查看(GCC):https://gcc.gnu.org/svn/gcc/trunk/

包括完整的词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等过程。

另外,楼主是想写一个这样的程序吗?如果是的话可以看一下这个,虽然不是JAVA,但是可能会对你有帮助:http://m.blog.csdn.net/blog/USBdrivers/8554689

顺便推荐一个源码下载网站,如果楼主想要源码,不妨先在这上面搜搜:http://sourceforge.net/

我也是写程序的,祝你早日摸到门道,加油哦!

6. GUN GCC 标准的编译器编译原理疑问

for(i=0,i<6,i++)括号里的三句话应该用分号分开,你的好像是误用了逗号,改过来就行了。
for(i=0;i<6;i++)

7. 怎样阅读 gcc 源代码

1.先学会gcc对c语言的扩展
2.对照gcc internals(网上已有中文版本)查看源代码
3.最好下载“现代编译原理:C语言描述.pdf”,比如计算必经点公式、活跃分析、着色图的寄存器分配....不对照课本知识,你就是看不懂。

8. 请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

gcc -S *.c 预处理+反汇编

9. 想读懂gcc源代码

学学编译原理, 然后在看吧, 你要是没编译原理的基础, 你就看代码, 你更本就不能理解它的算法, 你也没办法理解它的思想

10. gcc中C语言的词法分析是怎么做的

已知所有关键字,剩下的只是语句和括号堆栈匹配而已。
大体原理可以参考《编译原理》的“有限状态机”。

热点内容
pythonwhile 发布:2024-05-01 00:04:25 浏览:729
c语言用中文写代码能编译通过吗 发布:2024-04-30 23:59:18 浏览:535
小X分身存储隔离 发布:2024-04-30 23:54:50 浏览:757
安卓电话录音怎么使用 发布:2024-04-30 23:42:38 浏览:413
windows运行python 发布:2024-04-30 23:38:18 浏览:783
节奏大师安卓脚本 发布:2024-04-30 23:25:18 浏览:421
ftp上传进度 发布:2024-04-30 23:11:23 浏览:882
python网页抓取 发布:2024-04-30 23:11:02 浏览:885
虚拟机linux无线 发布:2024-04-30 22:53:49 浏览:750
忘了信用卡密码怎么办 发布:2024-04-30 22:47:43 浏览:722