通常,在宏中,您会看到人们使用a do { ... } while(0)来吞下分号.我刚刚遇到了一个他们使用的例子({ ... }),它似乎不仅吞下了分号,而且似乎也允许你返回一个值:
#define NEW_MACRO() ({ int x = 1; int y = 2; x+y; })
if(1)
val = NEW_MACRO();
else
printf("this never prints");`
Run Code Online (Sandbox Code Playgroud)
val会出来3.我找不到任何关于它的文档,所以我对它有点警惕.这种方法有什么问题吗?