预处理器宏在表达式的开头使用插入符号^符号

时间:2011-07-27 23:06:37

标签: objective-c syntax objective-c-blocks 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); \
}())

它看起来像是在创建匿名函数或其他东西。这个概念叫什么?我在哪里可以阅读它?

4 个答案:

答案 0 :(得分:8)

这是一个C区块。它非常像一个匿名函数(在使用中,而不是在结构中)。您可以在Mike Ash的网站和Apple's documentation中了解更多相关信息。

答案 1 :(得分:3)

这是一个块。它不是标准的C,但是Apple的LLVM编译器支持它(大约在Xcode 3.2 IIRC及更高版本左右)。有关详细信息,请参阅herehere

对于Objective-C,它不仅仅是 ,而且也是C和C ++编译器的一部分。

答案 2 :(得分:1)

答案 3 :(得分:0)

它是一个C块,它将创建一个无穷大的功能。

请注意,它会创建对系统API的调用来处理这些调用,不了解mac,但对于iOS,运行时系统必须为3.2或更高版本才能支持这些调用。