Linux のソース コードを読んでいるときに、奇妙な構文を見つけました。container_of マクロは次のようになります
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
私を混乱させたのは、 ({statement1; statement2;}) のような構文です
次のような簡単なコードを試しました
int a = {1;2;};
gccでコンパイルしました。実行後、'a' は 2 のように見えましたが、Microsoft VC++ でコンパイルできませんでした。この構文は gcc の拡張機能ですか? もしそうなら、複数のステートメントを定義し、マクロを使用して値を返すなど、gcc 展開なしで同じ効果を得るにはどうすればよいですか?