sto vedendo strano comportamento con la macro MAX in Objective C. In particolare, ho questo codice nel mio funzione principale:Objective C MAX macro bug
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));
L'output è:
[array count] - 1 = -1
MAX(0, [array count] - 1) = -1
MAX(0, -1) = 0
ho salvato l'uscita del preprocessore con -save-temps, e sembra che questo:
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)));
Tutte le parentesi necessarie sono lì e [array count] - 1
non ha effetti collaterali, quindi i normali problemi macro non dovrebbero essere applicati. Qualche idea su cosa sta succedendo?
Non ho notato che il valore restituito non era firmato, ma ha senso. Grazie! –