码迷,mamicode.com
首页 > 其他好文 > 详细

宏函数的写法

时间:2014-07-19 18:01:59      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   问题   

宏函数有执行较快,但占用代码长度较大,且不易调试的特点

 

对于运算型的宏函数,可以写成

#define f(a,b)   ((a)+(b))

宏函数中所有的参数都应该加小括号保证a,b先运算完毕,宏函数的最外面应该再加一层小括号保证宏函数整体运算

 

对于复杂的,需要调用其他函数的宏函数,则应该使用大括号把他们包在一起,避免如if之类的语句,只执行到第一句。

#define F(a,b)  {  \
          f(a);          g(b);          }  

其中反斜线是为了满足宏函数定义在一行内的要求。    

但这边又出现另外一个问题,对于一些语句,比如if(x) F(a,b) else...中要求if中带的语句只能有一个,如果使用上述形式,展开后变成

if (x) 
{
    f(a);  
    f(b);
}; 
else
...

多了一个分号,不符合语法规范。显然是两个语句,违反了语法规定,因此,需要在大括号外面套一个后面还可以接分号的语句,常见的是do{}while(0);

最后的形式是:

#define F(a,b)  do{  \

          f(a);
          g(b);
          }while(0)

展开后的形式是

if ( x )
      do { f(a);    f(b);    } while(0);
else
    ...

 

参考:

C 宏定义的简单总结  

http://dxf206.blog.163.com/blog/static/4227861200952511813462/

宏函数的写法,布布扣,bubuko.com

宏函数的写法

标签:style   blog   http   color   使用   问题   

原文地址:http://www.cnblogs.com/mictech/p/3853578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!