Je vois un comportement étrange avec la macro MAX en Objective C. Plus précisément, j'ai ce code dans ma fonction principale:Objectif C MAX bug macro
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));
La sortie est:
[array count] - 1 = -1
MAX(0, [array count] - 1) = -1
MAX(0, -1) = 0
J'ai sauvé la sortie de préprocesseur avec -save-temps, et il ressemble à ceci:
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)));
Toutes les parenthèses nécessaires sont là , et [array count] - 1
n'a pas d'effets secondaires, donc les problèmes de macro habituels ne devraient pas s'appliquer. Une idée de ce qui se passe?
Je n'ai pas remarqué que la valeur de retour était non signée, mais cela a du sens. Merci! –