c语言的宏可以用函数吗,c语言 定义函数宏

C语言-函数式宏

函数式宏(function-like macro)较之对象式宏可以进行更复杂的代换。

创新互联主要从事成都网站制作、成都做网站、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务冀州,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

函数式宏 sqr 是在编译时展开并填入程序的,因此 只要是能用双目运算符 * 进行乘法计算的数据类型,都能使用函数式宏 。

函数定义则需为每个形参都定义各自的数据类型,返回值的类型也只能为一种。就这点而言,函数较为严格。

函数为我们默默无闻地进行了一些复杂处理,如:

而函数式宏所做的工作只是宏展开和填入程序,并不进行上述处理。

根据以上特征, 函数式宏或许能使程序的运行速度稍微提高一点,但是程序自身却有可能变得臃肿 。

函数式宏在使用上必须小心谨慎。例如, sqr(a++) 展开后 ((a++) * (a++)) 。每次展开, a 的值都会自增两次。在不经意间表达式被执行了两次,导致程序出现预料之外的结果,我们称这种情况为宏的 副作用(side effect) 。

C语言里宏定义能在主函数里写吗?

当然可以,宏定义是预处理的。在什么地方写都可以。

编译器只是把宏定义的作替换。定义好的宏,在真正编译的时候被所定义的块给替换了。

c语言宏定义函数如何调用(里面含参数可以当函数用吗)

直接调用即可。如下示例:

#includestdio.h#define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);}int main(){    int x=0,y=0;    scanf("%d%d",x,y);    sum (x,y);    return 0;}

拓展资料

使用宏函数或者宏函数时,注意如下几点:

1.宏函数的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。

2.宏函数定义要注意格式,尤其是括号。

如果上面的宏函数写成 #define MAX(a, b) (ab?a:b),省去内层括号,则宏展开就成了k = (i0x0fj0x0f?i0x0f:j0x0f),运算的优先级就错了。同样道理,这个宏定义的外层括号也是不能省的。若函数中是宏替换为 ++MAX(a,b),则宏展开就成了 ++(a)(b)?(a):(b),运算优先级也是错了。

3.宏函数往往会导致较低的代码执行效率。

若是普通函数,则通过递归,可取的最大值,时间复杂度为O(n)。但若是宏函数,则宏展开为( a[n]max(n-1)?a[n]:max(n-1) ),其中max(n-1)被调用了两遍,这样依此递归下去,时间复杂度会很高。

网站名称:c语言的宏可以用函数吗,c语言 定义函数宏
本文地址:https://www.cdcxhl.com/article44/dsgphee.html

成都网站建设公司_创新互联,为您提供电子商务网站内链外贸网站建设网站策划网站设计网页设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管