私は、Mac OS X上のMIN
の定義を見て、これが見つかりました:それは、最初はそれほど明らかではないが、それが膨張すると、それは私には非常に奇妙に見える何かに変身スコープをカッコで囲み、Cで値を返すことはできますか?
#define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
を:
int a = 1, b = 2;
// int min = MIN(a, b);
int min = ({
int __a = (a);
int __b = (b);
__a < __b ? __a : __b;
});
これは、実際には、最後の式の値を「返す」式にラップされたスコープです。スコープ内のほとんど任意のコードと、少なくとも打ち鳴らすと、動作するようです:
int a = ({
time_t x = time(NULL);
if (x % 3 == 1)
x++;
x % 10;
});
私は前にこれを見たことがなかった、それが標準だ場合、私は思っていました。私はVisual Studioがそれを受け入れないという事実を知っていますが、Visual StudioはC89に固執しているので、それはあまり知られていません。
これはあなたの質問に答えます:http://en.wikipedia.org/wiki/Blocks_(C_language_extension) – SomeWittyUsername
@icepack、それはブロックではありません。ブロックはカッコ演算子で呼び出され、 '^'文字で始まる必要があります。 – zneak
FWIW、[ISO 9899:1999](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)で何も見つかりません。 (これはそこにないことを意味するわけではありませんが、明らかに私が明白な場所ではないと確信しています) – millimoose