C语言宏定义
2019-10-17 本文已影响0人
taobao
1、一般定义
//定义常量
#define pi 3.1415926
//定义表达式
#define add(a, b) a+b
#define max(a, b) (a>b)?a:b
//复杂表达式最好用括号括起来, 防止出错
#define mul(a, b) (a)*(b)
mul(1+a, 2+b) //会解析成:(1+a)*(2+b)
#define mul(a, b) a*b
mul(1+a, 2+b) //会解析成:1+a*2+b
2、条件判断
#if defined true //判断是否定义
#undef true //如果定义了取消定义
#define true 1 //重新定义
#endif //if结束
#ifdef true //#ifdef是#if defined的简写
#endif
#if !defined true //如果未定义
#define true 1
#endif
#ifndef true //如果未定义 #ifndef是if !defined的缩写
#define true 1
#endif
3、编译时错误信息
#ifndef true
#error undefined true //定义的错误信息不需要引号
#endif
4、系统常见自定义宏
__FILE__ 当前编辑的文件
__FUNCTION__ 点前的函数名
__LINE__ 行号
__DATE__ 日期
__TIME__ 时间
5、宏参数的字符串化和宏参数的连接
字符串化:
#define STR(s) #s
printf("%s %s %s\n", STR(abc), STR('abc'), STR("abc"));
如果:
#define STR1(s) s
printf("%s\n", STR1("abc")); //正确
printf("%s\n", STR1(abc)); //需要提前定义abc
printf("%s\n", STR1("abc")); //需要提前定义'abc'
参数连接:
#define CON(a, b) a##b
printf("%d\n", CON(12, 34)); //输出1234
char *abcd = "test123";
printf("%s\n", CON(ab, cd)); //输出test123