Подтвердить что ты не робот

Макрос препроцессора с использованием символа caret ^ в начале выражения

Глядя на эту страницу: http://www.mikeash.com/pyblog/friday-qa-2010-12-31-c-macro-tips-and-tricks.html

Я нашел этот фрагмент кода с синтаксисом ^{... }(), что делают каретки/скобки?

#define MAX(x, y) (^{ \
    int my_localx = (x); \
    int my_localy = (y); \
    return my_localx > my_localy ? (my_localx) : (my_localy); \
}())

Похоже, что он создает анонимную функцию или что-то в этом роде. Что называется этой концепцией? Где я могу прочитать об этом?

4b9b3361

Ответ 1

Это блок C. Это совсем как анонимная функция (используется, а не в структуре). Вы можете узнать больше о них на сайте Mike Ash и в документации Apple.

Ответ 2

Это блок. Это не стандартный C, но он поддерживается компилятором Apple LLVM (около Xcode 3.2 IIRC и более поздних). Подробнее см. здесь и здесь.

Это не только для Objective-C, но также является частью компиляторов C и С++.

Ответ 4

Это блок C, который создаст анонимную функцию.

Обратите внимание, что он будет создавать вызовы системному API для обработки этих вызовов, не знаю о mac, но для iOS для поддержки этих вызовов система исполнения должна быть 3.2 или новее.