C语言复习(1)
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)的更多相关文章
- C语言复习---零散补充
一:double和float使用scanf获取数据 printf输出float和double都可以用%f,double还可以用%lf. 2 scanf输入float用%f,double输入用%lf,不 ...
- C语言复习20170728
C语言复习20170728 键盘输入和屏幕输出 字符常量:把字符放在一对单引号内,适用于多数可打印字符. 转义字符: 以反斜线()开头,也是放在一对单引号内,适用于控制字符. .\t,是水平制表符,相 ...
- C语言复习20170716
C语言复习20170716 C数据类型 图片来自:C语言基本数据类型简介 C语言程序处理的数据有常量和变量两种形式. 常量是在程序中不能改变其值的量.例如:整型常量.实型常量.字符常量.字符串常量和枚 ...
- C语言复习-字符串与指针
C语言复习-字符串与指针 例一: [字符串处理 去除C代码中的注释] C/C++代码中有两种注释,/* */和//.编译器编译预处理时会先移除注释.就是把/*和*/之间的部分去掉,把//以及之后的部分 ...
- C语言复习系列-转义字符
C语言复习系列-转义字符 准备学习stm32单片机,感觉需要复习一下C语言,翻看了菜鸟教程,竟然有不少地方看不懂,真让人汗颜······ 转义字符大部分语言里面都有,至少我学过的里面都有,在这些语言中 ...
- C语言复习2_运算符
今天复习一下C语言的运算符 1.赋值运算符 单等号 = 顺序是:从右往左 2.复合运算符 #include <stdio.h> #include <stdlib.h> int ...
- C语言 · 复习杂记
/*=================================*/ /* 基础部分 */ /*=================================*/一:.CPP--C++文件: ...
- C语言复习0_准备工作
前言: 第一次接触C语言是大一下学期的时候,2013年上半年,那个时候的开发工具还是VS C++,今天了解了一下,常用的开发工具变成了CodeBlocks.决定趁着毕业到入职这一段CD时间,拾起这门语 ...
- C语言复习---矩形法求定积分函数
一:分析: 大一学习积分的时候,我们学习过,可以通过矩形法来求定积分. 思路就是将积分区间划分成n等份,然后将这n等份近似看成矩形(或梯形),然后对所有的矩形(或梯形)的面积进行求和. 二:简单的例子 ...
随机推荐
- 详解javascript,ES5标准中新增的几种高效Array操作方法
1.js中常用的数组Array对象属性: 如图,其中用红色圆圈标记的部分,为ES5新增的属性. 2.浏览器支持情况: IE:9+; Chrome; Firefox2+; Safari 3+; Oper ...
- 单元测试中如何配置log4net
按道理来说,单元测试中基本没有对于日志的需求,这是由于单元测试的定位来决定的. 因为单元测试的思想就是针对的都是小段代码的测试,逻辑明确,如果测试运行不通过,简单调试一下,就能很容易地排查问题.但是单 ...
- 开启Tomcat 源码调试
开启Tomcat 源码调试 因为工作的原因,需要了解Tomcat整个架构是如何设计的,正如要使用Spring MVC进行Web开发,需要了解Spring是如何设计的一样,有哪些主要的类,分别是用于干什 ...
- FATAL ERROR: Could not find ./bin/my_print_defaults的解决办法
对mysql数据库初始化过程中,会有如下报错信息: 1 2 3 4 5 6 7 [root@localhost scripts]# ./mysql_install_db --user=mysql FA ...
- mysql5.6主从参数详解
mysql5.6的主从相当的不错,增加了不少参数,提升了主从同步的安全和效率,以下是mysql5.6主从参数详解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 如何阻止h5body的滑动
// 禁止 document.body.style.overflow = 'hidden'; function _preventDefault(e) { e.preventDefault(); } w ...
- log4j 实现只输入我们指定包的日志
#all logger output level is 'ERROR' and output position is stdout #so only write our project's DEBUG ...
- Linux 引导修复
前些天,我的Ubuntu老提示"Filesystem root"空间不足,于是,我煞笔的用win pe去扩展空间,结果,空间扩展不成,反倒丢失了引导..... 于是就上网查资料,看 ...
- mysql IP转换函数
1.将字符串类型的实际IP转换成十进制数值型的 SELECT INET_ATON('209.207.224.40'); 执行结果:
- VIM使用技巧总结
一.vim使用的基本配置 1: set nu //设置行号 2: set ts=4 //设置tab为4个空格大小 3: set expandtab //设置用空格代替tab 4: set ai //设 ...