宏函数和自定义函数

一开始将宏函数定义的时候,为了书写方便,将一个函数写成了几行,但是没有用连接符号连接起来,类似于下面

1 #define CHECK(ret) ({
2                  int ret;
3                  ...
4 })
GCC总是提示ret不在范围内;

我马上想到的是我的下面定义的 int ret往下都没有包括进宏里面,这个宏,定义的是 CHECK(ret)  ==  ({ ; 下面空出来的都是在main函数以外,这个当然会报错了,然后我用了连接符号,代码如下

1 #define CHECK(ret) ({  \
2                 int ret;                    
3 })

宏的定义是怎么结束的,宏的结尾是没有分号的,那么推断宏是通过回车来结束的,也就是整个一行都是宏,所以当宏很长时,就要用到连接符来连接了。



自定义函数 type func(arg){; ;}

下面简述一下两者的区别:
1.宏函数只是简单的代码复制
2.宏函数的形参没有分配空间
3.宏函数的运行速度比较快,因为不需要压栈出栈的操作
4.宏函数需要多加点括号

1.自定义函数只在目标文件中存在一处
2.自定义函数处理比较慢,因为涉及到了压栈出栈的操作
3.自定义函数的参数需要分配空间
4.存在值传递和引用传递的问题,而宏函数不存在这样的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值