【问题标题】:what is the purpose of "(void) ( { CODE } )" in c?c中“(void)({CODE})”的目的是什么?
【发布时间】:2012-11-03 15:39:12
【问题描述】:

在生成的一段 c 代码中,我发现了类似这样的内容(已编辑):

#include <stdio.h>

int main() {

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

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

  return 0;
}

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

那么,这个构造有什么作用呢?

【问题讨论】:

    标签: c


    【解决方案1】:

    ({ }) 是一个gcc 扩展,称为语句表达式

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

    语句表达式产生一个值,(void) 转换可能在这里消除编译器警告或明确声明语句表达式的值未被使用。

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

    【讨论】:

    • 目的只有一个:所有变量都在词法范围内。
    • @texasbruce 这是一个复合语句,不需要为此使用非便携式构造。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多