通常,在宏中,您會看到人們使用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