Блоки анонимного кода в c - PullRequest
       18

Блоки анонимного кода в c

4 голосов
/ 27 октября 2011

Что означает такое утверждение?

int x  = ( { int a; scanf( "%d", &a ); a ; } ) ;

Компилируется и запускается эквивалентно:

int x;
scanf( "%d", &x );

Это похоже на какой-то анонимный вызов функции или что-то в этом роде, но я не уверен. Я не сталкивался с такими утверждениями, как ({}), и не могу найти объяснений в Интернете. Любая помощь будет очень признателен, спасибо:)

Контекст:

Это код, который вы получаете, когда раскрываются макросы в следующем коде:

#define SI ({int a;scanf("%d",&a);a;});
int x = SI;

Это код, используемый кем-то на соревновании по программированию.

1 Ответ

6 голосов
/ 27 октября 2011

Это выражение выражения .
Это расширение компилятора, поддерживаемое GCC, и оно не является стандартом C ++, следовательно, оно не переносимо.
Если вы скомпилируете свой код с флагом -pedantic, он скажет вам об этом.

Этот мой ответ подробно об этом говорит.

...