标签:
#define XXX do{ XXX } while(0) 为什么会有这种用法
时常会遇到一个很"奇怪的宏定义", rt.(欧西巴...思考不够深刻啊, 皮鞭, 啪啪啪)
最近又遇到这家伙了,Quora上面Love神回答了这个问题, 我也就顶礼膜拜
http://www.quora.com/What-is-the-purpose-of-using-do-while-0-in-macros
这是C语言里面宏定义的时候,不会造成歧义或副作用的一种常用技巧.
考虑一下情况
#define foo(x) bar(x); baz(x)
foo(wolf);
bar(wolf); baz(wolf);
f (!feral) foo(wolf);
这就扩展成了下面的形式,(⊙o⊙)看,是不是出现了你不想要粗线的情况捏?
这里if语句只能作用于第一个bar()函数,无法作用于第二个baz().但是这种方式很可能不是程序员的本意.
本意就是把foo单做一个整体嘛~
if (!feral) bar(wolf); baz(wolf);
if (!feral) bar(wolf); baz(wolf);
#define foo(x) do { bar(x); baz(x); } while (0)
f (!feral) foo(wolf);
就变成了如下形式.
if (!feral) do { bar(wolf); baz(wolf); } while (0);
if (!feral) { bar(wolf); baz(wolf); }
#define foo(x) { bar(x); baz(x); }
if (!feral) foo(wolf); else bin(wolf);
if (!feral) { bar(wolf); baz(wolf); }; else bin(wolf);
#define XXX do{ XXX } while(0) 为什么会有这种用法
标签:
原文地址:http://blog.csdn.net/cinmyheart/article/details/44264237