C语言中的宏定义
#define是预处理器处理的单元实体之一
#define定义的可以出现在程序的任意位置
#define定义之后的代码都可以使用这个宏
C语言中的宏常量
#define定义的宏常量可以直接使用
#define定义的宏常量本质为字面量
实例1:宏定义分析
#define ERROR -1
宏定义的表达式:
#define表达式的使用类似函数调用
#define表达式可以比函数更加强大
#define变大师比函数更容易出错
实验2:宏表达式分析
// #include <stdio.h>
宏表达式与函数的对比:
宏表达式杯预处理器处理,编译器不知道宏表达式的存在
宏表达式用“实参”完全代替形参,不进行任何运算
宏表达式没有任何的“调用”开销
宏表达式中不能出现递归定义
强大的内置宏:
实验4:宏使用综合
#include
条件编译的基本概念:
条件编译的行为类似于C语言中的if ... else...
条件编译时预编译指示命令,用于控制是否编译某段代码(这也是项目中经常用到的)
条件编译实例:
// #include <stdio.h>
条件编译的本质:
预编译器根据条件编译指令有选择的删除代码
编译器不知道代码分支的存在
if ... else ... 语句在运行期进行分支判断
条件编译指令在预编译期进行分支判断
可以通过命令行定义宏
gcc -Dmacro = value file.c
或者
gcc -Dmacro file.c
实验:通过命令行定义宏
//#include <stdio.h>
#include的本质
#include的本质是将已经存在的文件内容嵌入到当前文件中
#include的间接包含会产生嵌入文件内容的操作
条件编译使用实例;
global
test
// #include <stdio.h>
条件编译可以解决头文件重复包含的编译错误
条件编译的意义:
条件编译使得我们可以按照不同的条件编译不同的代码段,因而可以产生不同的目标代码
#if... #else #endif 被预编译器处理,而 if ... else ...语句被编译器处理,必然被编译进目标代码
实际工程中条件编译主要用于以下两种情况
不同的产品线公用一份代码
区分编译产品的调试版和发布版
实例分析 产品线区分及调试代码应用
product
#include
小结: