C语言编译步骤
预处理
概念:
gcc 源文件 -E -o 程序名[.后缀]
预处理的功能
宏定义
不带参数的宏定义
语法:
#define 宏名 常量数据
预处理:
此时的预处理只做数据替换,不做类型检查
注意:
我们定义的宏是不会占用内存空间,还没有到编译环节,就已经被替换成了我们宏中的常量数据
带参数的宏定义
语法:
#define 宏名(参数列表) 参数表达式
面试题:
#define multi(a,b) a * b
/**
* 宏定义-带参数
*/
#include <stdio.h>
#define MULTI(a,b) a * b
int main()
{
int result = MULTI(7+2,3);
printf("%d\n",result);// 13
return 0;
}
宏定义的作用域
文件包含
概念:
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。这个适用于多文件开发。
预处理
此时的预处理,是将文件中的内容替换,文件包含指令。
包含方式:
系统会到标准库头文件目录(Linux下/usr/include )查找包含的文件
在当前工程路径下查找,如果未找到,系统会到标准库头文件目录查找
案例:
algorithm.h
algorithm.c
app.c
编译命令:
条件编译
概念
根据设定的条件选择待编译的语句代码。
预处理
将满足条件的语句进行保留,不满足条件的语句进行删除,交给下一步编译
语法:
避免头文件重复包含的方法
语法:
案例:
algorithm.h