看了一篇讲而立之年程序员失业的文章,触动不小,看来以后还是要及时总结。以前总结的东西总是放在本地文档,管理起来不方便,还是老老实实写博客吧。
使用#define 来定义
1.定义常量:
#define PI 3.14 //宏定义不要以 ; 结尾
#define SAY @"Hello, there!"
#define SAY @"What the hell am I \
saying" //宏定义比较长,可以用 \ 分开
使用:
double k = 2 * PI;
#define PERIMETER 2*PI
2. 定义代参数的函数
#define IS_LEAP_YEAR(y) y%4==0&&y%100!=0 || y%400==0
调用:
IS_LEAP_YEAR(2013)
- 参数列表的左括弧需要紧跟宏名称,中间不能有空格或者TAB之类的空白字符。
一般的定义宏,宏名称与值之间都是有空格的,如果参数列表的左括弧与宏名称之间有空格,编译器会认为 参数列表是宏值的开始。 - 宏的参数不需要指定数据类型。
由于宏在使用的地方展开,系统会根据上下文来确定其参数类型,因此宏的参数不需要指定数据类型。 - 由于宏的参数具体内容没法检查,所以应该小心运算的优先级。尽量的多加个括弧。
宏定义参数后边加#,那么在调用宏时,预处理程序将根据宏参数创建C风格的常量字符串
#define STR(x) #x
当我们需要将参数名和值一起打印来调试,或者动态拼凑某个类名来实例化对象:
#define chSTR2(x) #x
#define chSTR(x) chSTR2(x)
#define chERROut(desc) \
fprintf(stderr, _FILE_ "(" chSTR(_LINE_) ") warning: " #desc);