test.c

#include <stdio.h>

int main(){

printf("hello\n");

return 0;

}

1.预处理阶段

  由于在test.c中使用了头文件,所以GCC在编译时首先要把头文件stdio.h中的内容加载到test.c的首部

  gcc -E test.c -o test.i

  E表明只进行预处理。o表明输出文件名。

2.编译阶段

  词法分析:关键字、标识符等等是否正确;

  语法分析:程序中语句的语法是否正确;

  语义分析:语句的逻辑意义是否正确。

  gcc -S test.i -o test.s

  S表明只进行编译,生成一个汇编文件。

3.汇编阶段

  将汇编程序翻译成CPU能识别的二进制文件,即目标文件。

  gcc - c test.c -o test.o

  c表明只进行汇编。

4.链接阶段

  把程序中所有目标文件和所需的库文件都链接在一起

  gcc -test.o -o test

补充:

函数库实现:

信息的打印函数,文件的打开或关闭函数,内存空间的申请与释放函数,数学计算函数。

PS:在面向对象语言中,函数被封装在类中,所以函数库就变成了类库。

函数库的使用方式分为静态链接和动态链接两种。

1)静态链接是指编译系统在链接阶段把程序的目标文件和所需的函数库文件链接在一起,这样生成的可执行文件就可以在没有函数库的情况下运行。就好比火箭把燃料和氧料装在一起,就可以在没有空气的太空中飞行。

2)动态链接是指编译系统在链接阶段并不把目标文件和函数库文件链接在一起,而是等到程序在运行过程中需要使用才链接函数库。

静态链接产生的可执行文件体积较大,但运行效率较高。而使用动态链接文件小,运行效率低低一点。

在具体应用时,如果有多个源文件都需要调用函数库,那么应该选择动态链接的方式。而只有少数源文件需要调用函数库时,应该选择静态链接的方式。可以被静态链接的函数库称为静态库,可以被动态链接的函数库成为动态库,或者共享库。

Glibc(GNU library C)是GNU推出的C语言函数库,符合ISO C和POSIX标准。

在linux系统中,Glibc分布在/lib和/usr/lib目录下,其中/lib目录中的函数库文件主要是给/bin目录下的系统程序使用的,/usr/lib目录中的函数库文件主要是给/usr目录下的用户程序使用的。

如下所示为/usr/lib目录下的部分png函数库文件:

libpng.a

libpng.la

libpng.so

libpng.so.3

libpng.so.3.16.0

后缀为a的是静态库文件,后缀为la的是用来记录库文件信息的动态库文件,后缀为so的是动态库文件

C语言复习(1)的更多相关文章

  1. C语言复习---零散补充

    一:double和float使用scanf获取数据 printf输出float和double都可以用%f,double还可以用%lf. 2 scanf输入float用%f,double输入用%lf,不 ...

  2. C语言复习20170728

    C语言复习20170728 键盘输入和屏幕输出 字符常量:把字符放在一对单引号内,适用于多数可打印字符. 转义字符: 以反斜线()开头,也是放在一对单引号内,适用于控制字符. .\t,是水平制表符,相 ...

  3. C语言复习20170716

    C语言复习20170716 C数据类型 图片来自:C语言基本数据类型简介 C语言程序处理的数据有常量和变量两种形式. 常量是在程序中不能改变其值的量.例如:整型常量.实型常量.字符常量.字符串常量和枚 ...

  4. C语言复习-字符串与指针

    C语言复习-字符串与指针 例一: [字符串处理 去除C代码中的注释] C/C++代码中有两种注释,/* */和//.编译器编译预处理时会先移除注释.就是把/*和*/之间的部分去掉,把//以及之后的部分 ...

  5. C语言复习系列-转义字符

    C语言复习系列-转义字符 准备学习stm32单片机,感觉需要复习一下C语言,翻看了菜鸟教程,竟然有不少地方看不懂,真让人汗颜······ 转义字符大部分语言里面都有,至少我学过的里面都有,在这些语言中 ...

  6. C语言复习2_运算符

    今天复习一下C语言的运算符 1.赋值运算符 单等号 = 顺序是:从右往左 2.复合运算符 #include <stdio.h> #include <stdlib.h> int ...

  7. C语言 · 复习杂记

    /*=================================*/ /* 基础部分 */ /*=================================*/一:.CPP--C++文件: ...

  8. C语言复习0_准备工作

    前言: 第一次接触C语言是大一下学期的时候,2013年上半年,那个时候的开发工具还是VS C++,今天了解了一下,常用的开发工具变成了CodeBlocks.决定趁着毕业到入职这一段CD时间,拾起这门语 ...

  9. C语言复习---矩形法求定积分函数

    一:分析: 大一学习积分的时候,我们学习过,可以通过矩形法来求定积分. 思路就是将积分区间划分成n等份,然后将这n等份近似看成矩形(或梯形),然后对所有的矩形(或梯形)的面积进行求和. 二:简单的例子 ...

随机推荐

  1. 谈谈yii2-gii如何自定义模板

    作者:白狼 出处:http://www.manks.top/article/yii2_gii_custom_template本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位 ...

  2. MVC 多语言记录1 设置默认的ResourceType

    http://stackoverflow.com/questions/3260748/default-resource-for-data-annotations-in-asp-net-mvc Add ...

  3. java:comp/env/jdbc/ 的两种配置方法

    1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  4. JQuery 世界时间

    根据表格的时间显示表格的时间,本机的时间,韩国的时间 <%@ Page Language="C#" AutoEventWireup ="true" Cod ...

  5. 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项 解决方法

    在webconfig中加入这段话就可以了 <runtime>    <assemblyBinding xmlns="urn:schemas-microsoft-com:as ...

  6. 【JAVA 小结】Java关于类与对象的代码

    分别建立2个类class works 和 Person import java.io.*; public class works { public static void main(String[] ...

  7. java汉化

    http://download.eclipse.org/technology/babel/babel_language_packs/R0.13.0/luna/luna.php _x86_64版本下载地 ...

  8. SCCM 客户端的修复

    1. Stopping the SMS Agent Host service (net stop ccmexec) 2. Stopping the WMI service (net stop winm ...

  9. git 学习使用总结三(远程仓库操作)

    这篇文章仅供自己以后翻阅加深记忆,要系统的学习 git 教程(中文版),请移步到 liaoxuefeng.com 学习 git 教程部分. pull, fetch, clone, push, chec ...

  10. python数字图像处理(9):直方图与均衡化

    在图像处理中,直方图是非常重要,也是非常有用的一个处理要素. 在skimage库中对直方图的处理,是放在exposure这个模块中. 1.计算直方图 函数:skimage.exposure.histo ...