c语言的编译过程和GCC 编译参数
原文: http://www.cnblogs.com/zhangShanGui/p/4912135.html
C语言的编译过程和GCC编译参数
C语言的编译一般有三个步骤:
- 预编译:
gcc -E -o a.e a.c
预编译a.c文件,生成的目标文件名为a.e
预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注释
示例:
//main.c
#include <stdio.h>
#include "sum.h"
int main(){
int m = 6;
int n = 5;
int result = sum(m,n); printf("hello\n%\n",result);
//sum.h
int sum(int x,int y);

运行之后结果为:

第一步就是这样的啦!
2 . 编译
gcc -S -o a.s a.e
将a.e翻译成一个ASCII汇编语言文件a.s.
3 .链接
gcc -o a a.s
这行命令告诉gcc对源程序a.o进行链接,生成可执行程序a
gcc 没有任何参数,表示就是链接

GCC编译器的基本选项如下表:
| 类型 | 说明 | 
| -E | 预处理后即停止,不进行编译、汇编及连接 | 
| -S | 编译后即停止,不进行汇编及连接 | 
| -c | 编译或汇编源文件,但不进行连接 | 
| -o file | 指定输出文件file | 
C语言的include头文件
- include是要告诉编译器,包含头文件
- 在C语言中,任何的库函数调用都需要包含头文件
- 头文件也相当于一个文档声明
- 如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型
- 如果把函数原型包含在一个头文件中,那么就不用每次使用函数的时候都声明其原型了,把函数声明放进头文件中是个好习惯!
- 头文件可以不需要编译
- 可以查看具体的声明
- 头文件加上实现文件的o文件提交给使用者即可,不需要知道源代码
- o文件预先编译,所以整个项目编译时,会大大提高编译的时间 。
- 当一个文件(A.c文件)依赖于头文件(b.h)时,如果b.c编译之后形成的b.o文件重新编译后,a.o的文件不需要重新编译
- 可以极大降低手工复制,粘贴的错误几率
头文件的注意事项:
- <头文件>,表示让C语言编译器在系统目录(即gcc编译器的include目录下)下寻找相关的头文件
- “头文件”,表示让C语言编译器在用户当前目录下寻找相关的头文件
- 如果是使用了C语言库函数的需要的头文件,那么一定是#include<>
- 如果是使用了用户自定义的头文件,那么一定是#include“”
c语言的编译过程和GCC 编译参数的更多相关文章
- C语言的编译过程和GCC编译参数
		C语言的编译一般有三个步骤: 预编译: gcc -E -o a.e a.c 预编译a.c文件,生成的目标文件名为a.e 预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注 ... 
- C语言编译过程以及gcc编译参数
		1.1 C语言编译过程,gcc参数简介 1.1.1 C语言编译过程 一.gcc - o a a.c -o:指定文件输出名字 二.C语言编译的过程: 1.1.1 ... 
- C语言的编译过程、安装gcc编译器以及设置环境变量
		以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ... 
- C语言基础(21)-C语言编译过程及GCC参数简介
		任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ... 
- 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程
		汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ... 
- 我学C的那些年[ch01]:浅淡C语言的编译过程
		前几天大致学习了C语言的编译过程,那么今天就和大家分享一下 首先,编译C语言,需要一个文本编辑器(windows自带的也行),和一个MinGW编译器(需要配置环境),就可以将.c文件编译成.exe文件 ... 
- 4、C语言的编译过程链
		在学校学C语言的时候,很多人都不是很注重编译过程链,但是其实编译过程是项目过程中很重要的一部分,有时候有些语法诸如static.volatile等关键词不理解时大多数都是对整个C语言编译链没有进行过详 ... 
- .NET语言的编译过程:中间语言(IL)和即时编译器(JIT)
		.NET语言的编译分为两个阶段.首先高级语言被编译成一种称作IL的中间语言,与高级语言相比,IL更像是机器语言,然而,IL却包含一些抽象概念(比如:类.异常),这也是这种语言被称为中间语言的原因.IL ... 
- 关于阿里云ESC上go语言项目编译6l: running gcc failed: Cannot allocate memory
		(1)前段时间将自己的阿里云服务器上的系统由centos 6.5换为了ubuntu 14,其他的硬件配置都没有发生改变,将服务器上的数据恢复并且重新安装了golang的编译环境后,发现使用go bui ... 
随机推荐
- 第九十七节,使用JavaScript
			使用JavaScript 学习要点: 1.创建一张HTML页面 2.<Script>标签解析 3.JS代码嵌入的一些问题 一.创建一张HTML页面 因为JavaScript是嵌套在html ... 
- [妙味JS基础]第二课:for应用、this关键字
			知识点总结 getElementsByTagName(动态方法) 与 getElementById(静态方法) 的区别 1.ID前面只能跟document,不能跟其他元素,比如:document.ge ... 
- php的实参和形参
			1.实参是调用函数时候的参数; 2.形参是声明函数时侯的参数, 例如 public function demo($a,$b) { return ; } 如果声明的函数如上,调用时dem ... 
- 6、Web应用程序中的安全向量 -- customErrors(适当的错误报告和堆栈跟踪)
			几乎所有的网站在开发过程中都在web.config文件中设置了特性<customErrors mode="off">. customErrors模式有3个可选的设置项: ... 
- shell脚本学习(五)
			1.统计文件的行数.单词数.字符数 1)行数: wc -l file cat file | wc -l 2)单词数 wc -w file cat file | wc -w 3)统计字符数 wc -c ... 
- 使用某些Widows API时,明明包含了该头文件,却报错“error C2065: undeclared identifier”
			在使用一些新版本的API,或者控件的新特性(比如新版的ComCtl32.dll)的时候,你可能会得到“error C2065: undeclared identifier.“这个错误.原因是这些功能是 ... 
- 2016-02-03 JS正则表达式
			var reg = new RegExp("^(([1-9]{1,2})|100)$"); var strRate = $('#GOODS_SPEC_DEPOSIT_RATE'). ... 
- Chapter 14_4 使用_ENV
			因为_ENV是一个普通的变量,我们可以像其他变量一样去对它进行赋值和访问. _ENV = nil 上面的赋值操作,将会使得在它之后的代码块不能直接访问全局变量.不过,对控制你的代码所使用的变量有用处. ... 
- setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux
			This is a guide on setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientif ... 
- HTML 概述
			一.hello world<!--根标签--><html> <!--头部--> <head> <!--标题标签--> <title&g ... 
