Liunx下C与C++的编译

本文详细介绍了Linux环境下C与C++的编译流程,包括预处理、编译、汇编和链接四个阶段。讲解了C语言的预处理如何通过gcc -E命令实现,以及C++编译只需将gcc替换为g++。同时,文章还讨论了makefile的使用,如何简化编译工作,并给出了makefile中clean目标的示例。
摘要由CSDN通过智能技术生成

一、Liunx下C与C++的编译

1、编译的流程概念:

	预处理--> 编译-->汇编-->链接

详细流程:
1、预处理阶段。
具体做的事儿如下:
(1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换
(2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些
(3)处理#include,将#include指向的文件插入到该行处
(4)删除所有注释
(5)添加行号和文件标示,这样的在调试和编译出错的时候才知道是是哪个文件的哪一行
(6)保留#pragma编译器指令,因为编译器需要使用它们。
2、编译阶段。
编译的过程实质上是把高级语言翻译成机器语言的过程,即对a.c做了这些事儿
(1)词法分析,
(2)语法分析
(3)语义分析
(4)优化后生成相应的汇编代码
3、汇编阶段。
汇编器(as) 将hello.s翻译成机器语言指令,把这些指令打包成为一种叫做可重定位目标程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件, 它的字节编码是机器语言指令而不是字符,如果我们在文本编辑器中打开hello.o文件,呈现的将是一堆乱码。
4、链接阶段。
将多个文件结合起来,打包成可执行文件

2、C与C++的编译实现过程

C语言的源程序文件  *.c  编译工具 gcc
C++语言的源程序文件 *.cpp 编译工具 g++

c++就把c语言的gcc改成g++即可
以下以C语言为编译例
1、预处理

1、预处理:预处理指令执行   宏 展开

		gcc -E test.c 
		gcc -E test.c > test.txt  (将编译的过程,发送到test.txt)
		gcc -E text.c -o A.txt  (-o可以将编译内容传到A.txt中,若没有A.txt则会创建)

代码


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值