在生成的一段 c 代码中,我发现了这样的内容(已编辑):
#include <stdio.h>
int main() {
(void) (
{
int i = 1;
int y = 2;
printf("%d %d\n", i,y);
}
);
return 0;
}
我相信我以前从未见过这个构造(void) ( { CODE } )
,也无法弄清楚其目的可能是什么。
那么,这个结构有什么作用呢?
在生成的一段 c 代码中,我发现了这样的内容(已编辑):
#include <stdio.h>
int main() {
(void) (
{
int i = 1;
int y = 2;
printf("%d %d\n", i,y);
}
);
return 0;
}
我相信我以前从未见过这个构造(void) ( { CODE } )
,也无法弄清楚其目的可能是什么。
那么,这个结构有什么作用呢?
({ })
是一个gcc
称为语句表达式的扩展。
http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
语句表达式产生一个值,并且(void)
强制类型转换可能在此处删除编译器警告或明确声明未使用语句表达式的值。
now(void) ({ })
与简单的复合语句相同,{}
没有使用它的意义。
一种应用是({ })
用代码块替换表达式的能力。通过这种方式,可以将非常复杂的宏嵌入到表达式中。
#define myfunc() { } // can be a typical way to automatize coding. e.g.
myfunc(x,y,z);
myfunc(y,x,z);
myfunc(x,z,y); // would work to eg. unroll a loop
int a = myfunc()*123; // but this wouldn't work
反而
#define myfunc(a,b,c) ({printf(a#b#c);})
int a= myfunc(a,b,c) * 3; // would be legal