宏定义
#define
-
开头的是编译预处理指令
- 他们不是C语言的成分,但是C语言程序离不开他们
-
define用来定义一个宏
#define 标识符 值
// 注意,后面没有分号(他不是C语言的语句)
- 标识符必须是一个单词,值是什么都可以
写了define后,预编译所执行的操作是简单的“文本”替换。把代码中所有出现标识符的地方替换为后面的值,可以使用能够 gcc --save-temps
来查看预编译后产生的文件,来查看这件事。
宏
- 后面的宏中如果出现前面宏中定义的标识符,也会被替换
- 宏需要写在一行,如果需要多行书写,可以在行尾加
\
(不只是宏可以这样,C语言代码也可以) - 宏也可以写注释,不会被当作宏的一部分
- 没有值的宏可以用作条件编译,后面可以使用其他预处理质量来检测这个宏是否定义过。(如
#define _DEBUG
)
预定义的宏
这些宏默认提供的,可以实现一些功能
宏 | 用处 |
---|---|
__LINE__ | 当前行号 |
__FILE__ | 当前文件名 |
__DATE__ | 编译日期 |
__TIME__ | 编译时间 |
__FUNC__ | 当前所在的函数名 |
__STDC__ | STDC是预定义宏。当它被定义后,编译器将按照ansic标准来编译你的c程序。 |