标签: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
...
参考:
http://dxf206.blog.163.com/blog/static/4227861200952511813462/
标签:style blog http color 使用 问题
原文地址:http://www.cnblogs.com/mictech/p/3853578.html