1.宏定义
宏在C语言中一段带有名称的代码片段(使用#define定义),在预处理阶段会把程序中的宏名替换为对应的代码片段,然后才进入编译阶段由编译器进行编译
#define 宏定义
#undef 取消宏定义
#ifdef 判断宏是否定义
#ifndef 如果没有定义
1.2用#define定义宏的替换规则
1、 宏可以看作为一些命令的集合。它是一种预处理器指令,在预编译阶段将宏名替换为后面的替换体。
2、#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。
3、 #define的替换规则: 在程序中扩展#define 定义符号和宏时,需要涉及几个步骤:
- 在调用宏时,首先对参数进行检查,看看是否包含任何由 #define 定义的符号。如果是,它们首先被替换。
- 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值所替换。
- 最后,再次对结果文件进行扫描,看看它是否包含任何由 #define 定义的符号。如果是,就重复上 述处理过程。
注意:
1. 宏参数和 #define 定义中可以出现其他 #define 定义的符号。但是对于宏,不能出现递归。
CIRCUMFERENCE 宏定义中使用了 PI 和 RADIUS 这两个先前定义的宏
你不能在一个宏的定义中直接或间接地引用它自身,因为这会导致无限循 环替换
#define PI 3.14159
#define RADIUS 5
#define CIRCUMFERENCE 2 * PI * RADIUS 不建议这样使用
2. 当预处理器搜索 #define 定义的符号的时候,字符串常量的内容并不被搜索。
#define HELLO "Hello, "
#define WORLD "world!"
#define GREETING HELLO WORLD
printf(GREETING); // "Hello, world!"
2.typedef指令
typedef为C语言的关键字
作用: 是为一种数据类型(基本类型或自定义数据类型)定义一个新名字,
不能创建新类型
2.1 typedef和宏的区别
1、与define定义宏不同,typedef这个关键字的本质是做类型重命名
2、宏是预处理指令,本质是在预处理时进行文本替换,而typedef的确是由使用者对已有的类型进行重命名。