Макрос препроцессора, использующий символ вставки ^ в начале выражения - PullRequest
10 голосов
/ 28 июля 2011

Глядя на эту страницу: 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); \
}())

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

Ответы [ 4 ]

8 голосов
/ 28 июля 2011

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

3 голосов
/ 28 июля 2011

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

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

1 голос
/ 28 июля 2011
0 голосов
/ 28 июля 2011

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

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

...