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

Objective c 在表达式开头使用插入符号^symbol的预处理器宏,objective-c,syntax,objective-c-blocks,caret,Objective C,Syntax,Objective C Blocks,Caret,请看本页: 我发现这段代码带有^{..}()语法,插入符号/括号在做什么 #define MAX(x, y) (^{ \ int my_localx = (x); \ int my_localy = (y); \ return my_localx > my_localy ? (my_localx) : (my_localy); \ }()) 它看起来像是在创建一个匿名函数之类的东西。这个概念叫什么?我在哪里可以读到它?这是一个C块。它很像一个匿名函数(在使用中,而

请看本页:

我发现这段代码带有
^{
..
}()
语法,插入符号/括号在做什么

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

它看起来像是在创建一个匿名函数之类的东西。这个概念叫什么?我在哪里可以读到它?

这是一个C块。它很像一个匿名函数(在使用中,而不是在结构中)。你可以在Mike Ash的网站和中阅读更多关于他们的信息。

这是一个街区。它不是标准的C语言,但苹果的LLVM编译器(大约是Xcode 3.2 IIRC和更高版本)支持它。有关更多详细信息,请参阅和


这不仅仅是Objto-C,而是C和C++编译器的一部分。

< P>这是一个C块,它将产生一个讨厌的函数。< /P>
请注意,它将创建对系统API的调用来处理这些调用,不知道mac如何,但对于iOS,运行时系统必须是3.2或更高版本才能支持这些调用。

FYI,它是“插入符号”,而不是“胡萝卜”。)@Jeff,你有很多rep需要修复……这是一个非常愚蠢的例子,因为它可以通过一个完美的标准
静态内联
函数来实现。宏的唯一好处是类型泛型编程,他们用固定类型的局部变量破坏了它…@Carl:对他来说,了解它很重要,但还不足以解决它。因此,Heath的非编辑、注释-可能的复制品由LVVM(可能是GCC的最新版本)支持,在C和C++中(Objul-C++)。正如LDAV1所提到的,它还不是标准的。我开始担心,有了20年的C经验,我不知道这是怎么回事@卡朱卢克,酷,也许我们可以把它标准化,还有
\u try
declspec