宏(define),类型定义符(typedef),内联函数(inline)的区别与联系
宏(define)
define
宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为:#define 宏名 字符串;带参宏定义的一般形式为:#define 宏名(参数表) 字符串,被定义的字符串称为替换文本。
不带参的:
#define <宏名> <字符串>
#define A 1
带参数的
#define <宏名> (<参数表>) <宏体>
#define A(x) x
编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏出现的地方 只是简单地使用串来代替,并不会增添任何的符号
对于宏定义还要说明以下几点:
1. 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
2. 宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
3. 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。
程序编译的四个阶段
四个阶段分别是: 预编译,编译,汇编,链接
1,预编译:将头文件展开,将宏定义替换,头文件进行处理,类似于其他的宏定义。同时,我们在进行编写代码的注释,通过预编译则可以则可以对这些对于代码编译无关紧要的东西进行处理。生成.i文件。
2,编译:将预处理后的文件转换成汇编语言,包含了词法检查,语法检查,权限检查, 代码优化,而函数的编译过程,则是从上往下进行,而不是函数执行时先从main()函数开始。生成.s文件。
3,组装:将编译后的代码组装成机器码, 形成位置无关的.o文件 。
4,链接:将多个位置无关的目标文件合并成可执行文件。
条件编译
为了避免同一个文件被include多次,C/C++中有两种方式,一种是