c中“(void)({CODE})”的目的是什么?

时间:2012-11-03 15:39:12

标签: c

在生成的c代码中,我找到了类似这样的内容(编辑过):

#include <stdio.h>

int main() {

  (void) (
    {
      int i = 1;
      int y = 2;

      printf("%d %d\n", i,y);
    }
  );

  return 0;
}

我相信我之前从未见过构造(void) ( { CODE } ),也无法弄清楚目的是什么。

那么,这个结构有什么用呢?

2 个答案:

答案 0 :(得分:13)

({ })是名为语句表达式gcc扩展名。

http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html

语句表达式产生一个值,(void)强制转换可能在这里删除编译器警告或明确表示不使用语句表达式的值。

现在(void) ({ })与简单的复合语句{}相同,没有必要使用它。

答案 1 :(得分:2)

({ })的一个应用程序是用代码块替换表达式的能力。通过这种方式,可以将非常复杂的宏嵌入到表达式中。

#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