7

生成されたcコードの一部で、次のようなものを見つけました(編集):

#include <stdio.h>

int main() {

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

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

  return 0;
}

私はこれまで構造を見たことがないと信じています(void) ( { CODE } )し、その目的が何であるかを理解することもできません.

では、このコンストラクトは何をするのでしょうか?

4

2 に答える 2

13

({ })ステートメント式と呼ばれるgcc拡張機能です。

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

ステートメント式は値を生成し、(void)キャストはおそらくコンパイラの警告を削除するか、ステートメント式の値が使用されていないことを明示するためにここにあります。

これ(void) ({ })は単純な複合ステートメントと同じで{}あり、使用する意味がありません。

于 2012-11-03T15:40:38.657 に答える
2

のアプリケーションの1 つ({ })は、式をコード ブロックに置き換える機能です。このようにして、非常に複雑なマクロを式に埋め込むことができます。

#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
于 2012-11-03T16:06:44.153 に答える