次のような不正なコードがあります: (events は、このコードの実行時に 1 つの要素を持つ NSArray です)
MAX(0, self.events.count-2)
式の結果は 0 になるはずですが、結果は -1 です。NSObjCRuntime.h を確認すると、MAX() は次のようになります。
#define MAX(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
lldb を使用すると、次のように表示されます。
(lldb) p (int)[[self events] count]
(int) $0 = 1
(lldb) p (int)[[self events] count] - 2
(int) $1 = -1
(lldb) p (BOOL)[[self events] count] - 2 < 0
(bool) $2 = true
(lldb) p (BOOL)0 > [[self events] count] - 2
(bool) $3 = false
は?多分それは演算子の優先順位ですが...
(lldb) p (BOOL)(0 > [[self events] count] - 2)
(BOOL) $4 = NO
(lldb) p (BOOL)(0 > ([[self events] count] - 2))
(BOOL) $5 = NO
また、最初のおかしな回答の後で、デバッガーが大文字の BOOL/YES/NO に切り替わるのも奇妙です。前述のことから、このコードの動作が異なると推測されるかもしれません。
MAX(0, self.events.count-2)
...しかし、ここである程度の正気を保っているのかもしれませんが、これは間違って同じように機能します。構文に関する基本的な何かが欠けているに違いありませんが、それを見つけることができません。