Ошибка макроса MAX в Objective C

Я вижу странное поведение с макросом MAX в Objective C. В частности, у меня есть этот код в моей основной функции :

NSArray* array = [NSArray array];
NSLog(@"[array count] - 1 = %d", [array count] - 1);
NSLog(@"MAX(0, [array count] - 1) = %d", MAX(0, [array count] - 1));
NSLog(@"MAX(0, -1) = %d", MAX(0, -1));

Вывод следующий:

[array count] - 1 = -1
MAX(0, [array count] - 1) = -1
MAX(0, -1) = 0

Я сохранил вывод препроцессора с помощью -save-temps, и он выглядит так:

NSArray* array = [NSArray array];
NSLog(@"[array count] - 1 = %d", [array count] - 1);
NSLog(@"MAX(0, [array count] - 1) = %d", ((0) > ([array count] - 1) ? (0) : ([array count] - 1)));
NSLog(@"MAX(0, -1) = %d", ((0) > (-1) ? (0) : (-1)));

Все необходимые скобки присутствуют, а [количество массивов] - 1 не имеет побочных эффектов, поэтому обычные проблемы с макросами не должны возникать. Есть идеи, что происходит?

9
задан Adam Crume 24 September 2010 в 00:34
поделиться