Что значит ^ {} () означает в C? - PullRequest
0 голосов
/ 07 февраля 2019

enter image description here

При чтении одного из документов статического анализатора LLVM я наткнулся на странный оператор.

^{ int y = x; }();

Iзнаю, что я могу определить вложенный блок внутри функции, как {...}, но можем ли мы даже вызвать это?Кроме того, я никогда не видел, чтобы кто-нибудь использовал ^ перед блоком фигурных скобок.Я думал, что это своего рода расширение языка, поддерживаемое GCC, и гуглил это с помощью таких ключевых слов, как анонимная функция или lambda , но безрезультатно.Есть кто-нибудь, кто имеет представление об этом?

1 Ответ

0 голосов
/ 07 февраля 2019

С Clang 9 Спецификация языка документации для блоков это буквенное выражение блока .Он имеет вид (из wiki ):

^return_type ( parameters ) { function_body }

Но:

Если возвращаемый тип опущен и список аргументов равен (void)список аргументов (void) также может быть опущен.

Следующее:

^{ int y = x; }();

равно:

( ^void (void) { int y = x; } )();

равно:

void (^f)(void) = ^void (void) { int y = x; };
f();

Он объявляет литерал блока, который делает int y = x, и сразу же после объявления выполнения выполняется.

...