宏定义
在C语言中:
- #define 是预处理器处理的单元实体之一
- #define 定义的宏可以出现在程序的任意位置
- #define定义之后的代码都可以使用这个宏
- 定义宏常量:
- #define定义的宏常量可以直接使用
- #define定义的宏常量本质为字面量
宏定义的分析1: 宏定义与函数的对比
宏表达式被预处理器处理(直接对宏进行文本替换), 编译器不知道宏表达式的存在
预处理器不会对宏定义进行语法检查, 宏定义是出现的语法错误只能被编译器检测
宏表达式用 “实参”完全替代形参, 不进行任何运算
宏表达式没有任何的 “调用”开销,效率高于函数
宏表达式中不能出现递归定义
宏表达式可以比函数更强大,但也更容易出错,在使用时需小心使用
宏定义的分析2:强大的内置宏
宏 | 含义 | 示例 |
---|---|---|
__FILE__ | 被编译的文件名 | file1.c |
__LINE__ | 当前行号 | 25 |
__DATE__ | 编译时的日期 | Jan 31 2018 |
__TIME__ | 编译时的时间 | 17:01:01 |
__STDC__ | 编译器是否遵循标准C规范 | 1 |
/*测试代码*/
#include <stdio.h>
#define LOG(s) printf("[%s] {%s:%d} %s \n", __DATE__, __FILE__, __LINE__, s)
int main()
{
LOG("Begin to run main code...");
// ...........
LOG("End");
return 0;
}
运行结果
[Feb 25 2018] {..\C_Main\main.c:9} Begin to run main code...
[Feb 25 2018] {..\C_Main\main.c:13} End