宏函数

形式:
#define 宏名(参数列表) 字符串
如此宏便可以传入实数灵活应用。在进行字符串替换后,会进行实参替换。
由于仍然是宏定义,所以实参替换仍是在预处理阶段进行,不会进行任何加工,判断,检查。
宏名和参数列表之间不可有空格,参数列表中可以有。
注意宏函数易产生歧义,所以尽量应用括号;
eg:

#define p1(a) a*a
        #define p2(a)  ((a)*(a))
int main()
{
int b,a=1;
b=p1(9+a);
printf("%d"b);
b=p2(9+a);
printf("%d"b);
}

两次输出不同,第一次输出19,第二次输出100。
第一次原样代换成9+19+1结果为19,第二次代换为(9+1)(9+1)结果为100
用#undef仍可以结束宏函数作用域,使用形式:#undef 宏函数名
宏函数的形参不可指明数据类型,不然报错。
注意在宏函数中不可实现递归
宏函数可以使用一些特殊符号灵活运用,或使其目的明显。
eg:续行符\

#define max(a,b) /
(a>b)?a:b

//相当于#define max(a,b) (a>b)?a:b
##符号
可以将两个字符串进行连接并去掉##两边的空格。
#符号
将后面的宏参数进行字符串化操作,即在两边加上双引号并进行实参代换参数。
eg:

#define p(n) printf("p"#n"=%d",p##n);
int main()
{
int p1=100;
p(1)//相当于printf("p""1""=%d",p1);
return 0;
}

输出p1=100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值