- 1.#define基本性质
- 2.#define定义宏
- (1)#define定义普通宏
- (2)#define定义带参数的宏
- (3)预定义的宏
- #define <名字> <值>
- define定义宏时,如果一个宏的值中有其他宏的名字,也是会被替换的
#define PI 3.1415926
#define PI2 2*PI
-
注意没有结尾的分号,因为不是C的语句
-
名字必须是一个单词,值可以是各种东西
-
#开头的是编译预处理指令,它们不是C语言的成分,但是C语言程序离不开它们
-
在C语言的编译器开始编译之前,编译预处理程序会把程序中的名字换成值,它是完全的文本替换
-
如果一个宏的值超过一行,最后一行之前的行末需要加 \
#define exchange(a,b) { \
int t;\
t=a;\
a=b;\
b=t;\
}
- 宏的值后面出现的注释不会被当作宏的值的一部分
//define定义一个普通宏,MAX是这个宏的名字,1000是这个宏的值
#define MAX 1000
(2)#define定义带参数的宏
宏可以带参数,可以带多个参,也可以组合(嵌套)使用其他宏。
#define MAX 1000
#define ADD(x, y) ((x)+(y))
#include
int main()
{
int sum = MAX * ADD(2, 3);
printf("sum = %d\n", sum);//5000
return 0;
}
带参数的宏的原则: 整个值要括号,参数出现的每个地方都要括号
#define RADTODEG(x) ((x) * 57.29578)
错误定义的宏:
#define RADTODEG(x) (x * 57.29578)
#define RADTODEG(x) (x) * 57.29578
(3)预定义的宏
• LINE 表示进行编译的当前文件当前所在的行号。
• FILE 表示进行编译的源文件所在目录。
• __DATE__表示当前文件被编译的日期。
• TIME 表示⽂件被编译的时间,精确到秒。
• STDC 表示如果编译器遵循ANSI C,其值为1,否则未定义 。
#include
int main(int argc,char const *argv[])
{
printf("%s:%d\n",_FILE_,_LINE_);
// /Users/wengkai/cc,5
printf("%s,%s\n",_DATE_,_TIME_);
// Aug 3 2014,14:08:45
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)