首页 > 代码库 > 宏函数的写法

宏函数的写法

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

 

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

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