宏定义
编译预处理指令
- #开头的是编译预处理指令
- 他们不是C语言的成分,但是C语言离不开他们
#define
- #define<名字><值>
- 注意没有结尾的分号,因为不是C语句
- 名字必须是一个单词,值可以是各种东西
- 在C语言编译器开始编译之前,编译预处理会把程序中的名字换成值
宏
- 如果一个值的宏中有其他宏的名字,也是会被替换的
- 如果一个宏的值超过了一行,最后一行之前的行末需要加\
- 宏的后面出现的注释不会被当作宏的值的一部分
预定义的宏
-
__LINE__//行号
-
__FILE__//文件名
-
__DATE__//编译时的日期
-
__TIME__//编译时的时间
-
__STDC__//
#include<stdio.h>
int main()
{
printf("%s:%d\n", __FILE__, __LINE__);
printf("%s,%s\n", __DATE__, __TIME__);
return 0;
}
带参数的宏
像函数的宏
- #define cube(x) ((x)* (x)*(x));
- 宏可以带参数
#include<stdio.h>
#define cube(x) ((x)*(x)*(x));
int main()
{
printf("%d\n",cube(5)); //25
return 0;
}
可以是变量
int i;printf("%d\n",club(i));
带参数的宏的原则
-
一切都要括号(整个值和参数出现的每个地方)
-
#define RADTODEG(x) (©*57.29578);
-
可以带多个参数
#define MIN(a,b) ((a)>(b)?(b):(a)) -
也可以组合(嵌套)使用其他宏