#表示这是一条预处理指令
1, 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECOND_PER_YEAR (356*24*60*60)UL
注意点:
- 预处理指令结尾无分号
- 表达式将使一个16位机的整型数溢出-因此要用到无符号长整型符号U
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个
#define MIN(a,b) ((a)>=(b)?(b):(a))
3. 宏只是简单的文本替换
#define COUNT(M) M*M
2 int x=6;
3 print(COUNT(x+1));
4 print(COUNT(++X));
5 结果输出:13 和56
COUNT(x+1)被替换成COUNT(x+1*x+1) 即为:6+1*6+1=13
CUNT(++x)被替换成++x*++x即为7*8=56而不是想要的7*7=49,连续前置自加加两次
++x 先将x本身的值加1 然后参与表达式中计算
x++先在当前表达式中使用x的值,然后再将x的值自增1
4.#的使用:
#的作用就是将#后边的宏参数进行字符串的操作,也就是将#后边的参数两边加上一对双引号使其成为字符串。例如a是一个宏的形参,则替换文本中的#a被系统转化为"a",这个转换过程即为字符串化
复制代码
1 #define TEST(param) #param
2
3 char *pStr=TEST(123);
4 printf("pSrt=%s\n",pStr);
5
6 输出结果为字符 ”123“
5,##运算符
##运算符也可以用在替换文本中,它的作用起到粘合的作用,即将两个宏参数连接为一个数
1 #define TEST(param1,param2) (param1##param2)
2
3 int num =TEST(12,34);
4 printf("num=%d\n",num);
5
6 输出结果为:num=1234