类型声明typedef和define的区别

来源:互联网 发布:kali linux webcrack 编辑:程序博客网 时间:2024/05/19 03:28

我们来看两个例子

1、用typedef定义类型

typedef unsigned int U32..........U32 var=3;

2、用define定义类型

#define U32 unsigned int........U32 var=3

同样是定义成无符号整形,但是两种定义方法是有区别的。区别在于:typedef定义的类型是在编译阶段处理的,而#define是在预处理阶段处理的。

对于编译流程主要有四个阶段:预处理阶段,编译阶段,汇编阶段,链接阶段。

预处理阶段:

                     预处理器(cpp)根据以字符#开头的命令(directives),修改原始的C程序。如hello.c中#include <stdio.h>指令告诉预处理器读系统头文件stdio.h的内容,并把它直接插入到程序文本中去。结果就得到另外一个C程序,通常是以.i作为文件扩展名的。

编译阶段:

                     在这个阶段中,首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,把代码翻译成汇编语言,生成汇编代码,以.s为后缀的文件。

汇编阶段:

                     这个阶段中是把编译阶段生成的”.s”文件转成目标文件.o文件。

链接阶段:

                     在成功编译之后,就进入了链接阶段。在这里涉及到一个重要的概念:函数库。函数库一般分为静态库和动态库两种。静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”。

原创粉丝点击