程序的编译过程:
预编译-----编译----汇编-----链接
1, 扩展头文件 ; 2,转成汇编语言;3,翻译成机器语言
预处理:
1:包含头文件 #include<>
#include<> 在系统库中找头文件
#include“” 在文件路径下找头文件
在Linux中 .h 文件都对应的.c 文件。.h 文件负责声明,.c文件负责定义。编译时一起使用
2: 宏定义:
定义一个宏名:
a, 定义一个宏名 #define NAME
b, 定义有特殊作用的宏名 #define NUMBER 100
c , 定义一个带参数的宏 #define MAX(x,y) ((x)>(y)?(x):(y))
注意: 宏名尽量大写,宏表示的内容最好用括号括起来 ,宏定义的末尾不要加分号“;”。
例如 : #define NUMBER (24*3600)
#define MAX(x,y) ((x)>(y)?(x):(y)) // 用括号括起来,保证运算的完整性
int main(void)
{
printf("%d\n", NUMBER); // 宏定义的末尾不要加分号“;”
int a = 100,b = 200;
printf("Max = %d",MAX(a,b));
}
3, 宏编译:
例子1: #if(NUMBER == 100) // 若条件成立,以下代码参与编译
int i = NUMBER
#else // 如果条件不成立,编译else里面代码
.........
#endif
例子2:#ifdef NUMBER // 如果条件成立,则参与编译
...........
#else // 若不成立,编译#else后面代码
...........
#endif
在Linux的头文件中,例如 tsfilterchain.h文件中
第一行代码一般都是:
#ifndef _TS_FILTER_CHAIN_H_ id no def // 如果宏,没定义,则定义
#define _TS_FILTER_CHAIN_H_
#endif
4 内联 inline :建议编译器吧这个函数预处理。
好处:节省时间开销 ,调用速度快,牺牲编译时间节约执行时间。
建议: 内联函数代码尽量简短, 因为内联函数对系统内存开销变大,存在多个拷贝,是程序变大。
使用:对速度要求较高的算法程序,可使用。-