博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

宏函数的写法

Posted on 2014-07-18 15:11  阿麦  阅读(1845)  评论(0)    收藏  举报

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

 

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

#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/