首页 > 代码库 > 宏函数的写法
宏函数的写法
宏函数有执行较快,但占用代码长度较大,且不易调试的特点
对于运算型的宏函数,可以写成
#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/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。