让我们考虑以下代码:
#include <stdio.h>
int main() {
int err =
(
{
int _err = 0;
for (int i = 0; i < 100; ++i) {
_err += i;
}
_err;
}
);
printf("%d", err);
}
我在gcc测试套件中发现了它(或者,更复杂的化身),并且对构造感到困惑:
int outer_var = ( { int local_var = 0; /* do some work on local_var */ local_var; } );
如果删除括号(或;
之后的)
),它将无法编译,但是带有括号的代码将编译为c或c ++。我所做的事情或多或少地清楚了(尽管我不得不承认,这是我第一次在独立的语句(_err;
中看到一个实际上具有含义的变量),但我只是避而远之直到现在还没有看到过这种结构,所以我想问一下在任何C或C ++标准中是否都有它的正式名称。