C语言宏定义

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

你可能感兴趣的:(C语言宏定义)