通常,在宏中,您会看到人们使用do { ... } while(0)
吞下分号。我只是碰到他们使用({ ... })
而不是一个例子来,它似乎不仅吞下分号,但似乎让你返回一个值,以及:在宏中使用({...})括号吞下分号
#define NEW_MACRO() ({ int x = 1; int y = 2; x+y; })
if(1)
val = NEW_MACRO();
else
printf("this never prints");`
VAL会出来为3,我可以没有找到任何文件,所以我对此有点谨慎。这个方法有什么问题吗?
这是一个GNU扩展。 – 2011-03-23 18:13:24
如果我记得,它不是标准(只有可能gcc兼容)。 – cobbal 2011-03-23 18:13:51
这段代码不是C,而是“GNU C”。 – 2011-03-23 18:24:31