c语言编译菜单被隐藏,被隐藏了的过程

C语言经典,“Hello World”耳熟能详,是每个人程序入门和开发环境测试的默认标准。

1 #include

2

3 intmain()4 {5 printf("Hello World");6 return 0;7 }

在Linux下,我们用gcc编译该程序(假设文件名为hello.c),只需要用最简单的命令.

$gcc hello.c

$./a.outHello World

但是,事实上,其中包含了4个步骤:预处理、编译、汇编、链接。

预处理

预处理过程将处理源代码中以“#”开始的预编译指令,生成文件以.i为拓展名。相当于执行语句(-E表示只进行预编译;-o 表示命名)

$gcc -E hello.c -o hello.i

或者

$cpp hello.c > hello.i

预编译过程中的主要处理规则如下:

将所有的“#define”删除,并展开所有的宏定义

处理所有的预编译指令,如“#if”,“#ifdef”等

处理“#include”指令,将被包含的文件插入到该指令位置。该过程是递归进行

删除所有的注释

添加行号和文件名标识

保留所有的#pragma指令

当我们无法判断宏定义是否正确或头文件包含是否正确是,可以选择查看预编译文件

编译

编译过程就是讲预处理完的文件进行一系列的词法、语法、语义分析以及优化后产生相应的汇编代码文件。(推荐看龙虎鲸)

编译过程相当于执行如下指令:

$gcc -S hello.i -o hello.s

在执行该语句时,gcc会根据不同参数要求去调用预编译编译程序cc1,汇编器as,链接器ld。

汇编

汇编是将汇编代码转变成机器可执行的指令。一般是根据汇编指令和机器指令的对照表意义翻译。该过程相当于执行语句:

$as hello.s -o hello.o

$gcc -c hello.s -o hello.o

链接

链接的过程比较复杂,我们会在后续文章中详细介绍。简单说,就是将汇编器产生的目标文件进行链接得到可执行文件。

2017-08-06

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值