将其分开:
声明:
#define MAX(a,b)
如果a
大于b
,使用a
else 使用b
:
( ((a) > (b)) ? (a) : (b) )
然后创建一个MIN
表达式,使用类似的形式:
#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
^
然后要创建一个MAX3
表达式,您可以将它们组合起来:
#define MAX3(a,b,c) ( MAX(a, MAX(b,c)) )
具体来说,此宏旨在与标量(C 内置函数)一起使用,可以使用<
or进行比较>
。如果您传递了一个 objc 变量,它将导致地址比较,并且 MAX 将返回具有较高地址的那个(如果您真的想比较 objc 实例的地址,这将是非常罕见的)。
另请注意,这是宏如何咬你的经典示例。使用宏,预处理器只需将参数扩展(文本复制/粘贴)到位,因此:int limits = MAX (4,8)
从字面上扩展为int limits = (4 > 8 ? 4 : 8)
. 如果你写MAX(x,++y)
, then如果大于或等于,y
则将增加两次,因为它扩展为:。y
x
int limits = (x > ++y ? x : ++y)