C语言基础(21)-C语言编译过程及GCC参数简介
任何C语言的编译过程可分为以下三部分:
一.预编译
在C语言中,以#开头的语句又叫预编译指令。预编译主要做以下两件事情:
1.将#include包含的头文件做简单的文本替换;
2.将代码中的注释删除。
gcc -E 参数代表预编译。以test.c函数为例,内容如下:

进行预编译:

如上图,编译完成后可生成new.c文件,打开new.c

发现之前写的#include<stdio.h>和注释都不见了,而上面出现了一堆乱七八糟的代码。事实上,预编译做的事情就是将注释去掉,然后将#include <stdio.h> 替换成上面那部分代码,而上面那部分代码其实就是stdio.h文件的内容。
二.编译
编译的作用就是把文本的C语言编译为二进制的指令。
gcc -c 参数代表编译。

三.链接
C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序当中去。
gcc 没有单独的链接参数

链接a.o最后生成的文件叫a.执行该文件:

显示程序的最终执行结果:hello world
PS: gcc -o 的语法:【gcc 源文件 -o 编译后生成的文件名】,o就是output的意思。
C语言基础(21)-C语言编译过程及GCC参数简介的更多相关文章
- c语言的编译过程和GCC 编译参数
原文: http://www.cnblogs.com/zhangShanGui/p/4912135.html C语言的编译过程和GCC编译参数 C语言的编译一般有三个步骤: 预编译: gcc -E - ...
- C语言编译过程以及gcc编译参数
1.1 C语言编译过程,gcc参数简介 1.1.1 C语言编译过程 一.gcc - o a a.c -o:指定文件输出名字 二.C语言编译的过程: 1.1.1 ...
- C语言代码区错误以及编译过程
C语言代码区错误 欲想了解C语言代码段会有如何错误,我们必须首先了解编译器是如何把C语言文本信息编译成为可以执行的机器码的. 背景介绍 测试使用的C语言代码 导入标准库,定义宏变量,定义结构体,重命名 ...
- C语言基础 (3) C语言介绍
01回顾 02 语言介绍 语言是人和人交流,C语言是人和机器交流. 03_为什么学C语言 04_第一个C代码编译运行 #include <stdio.h> int main() { // ...
- C语言的编译过程和GCC编译参数
C语言的编译一般有三个步骤: 预编译: gcc -E -o a.e a.c 预编译a.c文件,生成的目标文件名为a.e 预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注 ...
- C++语言基础(21)-异常
C++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception).你可以通过下面的语句来捕获所有的标准异常: try{ //可能抛出异常的语句 ...
- C语言基础(15)-多文件编译
一.头文件的使用 如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型.如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了 ...
- Java入门 - 语言基础 - 21.Scanner类
原文地址:http://www.work100.net/training/java-scanner.html 更多教程:光束云 - 免费课程 Scanner类 序号 文内章节 视频 1 概述 2 使用 ...
- 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式
目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...
随机推荐
- 安全管道工具SSF
安全管道工具SSF SSF(Secure Socket Funneling)是一款安全网络通信工具.它可以将多个管道的数据通过一个TLS连接转发给远程计算机,从而实现数据的安全传输.它不仅支持TC ...
- java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session
项目配置了spring 4.0.6.RELEASE 和hibernate4.2.0.Final ,出错原因是因为在Spring 3.1开始没有了HibernateDaoSupport类,而我的却Dao ...
- AtCoder - 2568 Lotus Leaves
Problem Statement There is a pond with a rectangular shape. The pond is divided into a grid with H r ...
- [CF414E]Mashmokh's Designed Problem
题意:给一棵树,有三个操作:①询问两点$(x,y)$之间的距离②把$x$和原来的父亲断开并连到它的$h$级祖先,作为新父亲最右的儿子③询问与根节点距离为$k$的点中最右的点是哪个点 用出栈入栈序$s_ ...
- 【spfa】bzoj3921 Mimori与树海
考虑“删除后图仍连通”,即其不是无向图的桥(bridge),可以用Tarjan算法预处理,这里不赘述. [算法一] 枚举删除的是哪条边,然后枚举起点,暴搜,统计答案. 可以通过0.1号测试点. 预计得 ...
- Android证书验证存漏洞 开发者身份信息可被篡改(转)
原帖地址:http://bbs.pediy.com/showthread.php?p=1335278#post1335278 近期在国内网易,雷锋网等网站爆出谷歌市场上的索尼官方的备份与恢复应用&qu ...
- C#中Math的使用总结
1.向上进位取整.Math.Ceiling 例如: Math.Ceiling(32.6)=33; Math.Ceiling(32.0)=32; 2.向下舍位取整.Math.Floor 例如: Math ...
- NEXUS7 学习
一.编译环境搭建 (更细节的环境搭建请参考:How to Build CyanogenMod for Nexus 7 (Wi-Fi, 2012 version) (codename: grouper) ...
- Layui 使用问题汇总
1. Layui数据表格中checkbox位置不居中 使用方法渲染的方式生成数据表格,添加了checkbox,但发现checkbox位置不居中,如下图所示 解决办法 通过layui官方社区,找到如下代 ...
- 前端h5开发发布ios
1.首先要有一个html5+的软件HBuilder 2.整体完成然后就点发布,主要注意页面入口就是你的网页的入口 3.下载一个appuploader软件,无需mac本就可以方便的申请证书和描述(因为发 ...