Fonction MAX / MIN en Objective C, éviter de jeter les questions

J'ai eu le code de mon application qui ressemble à la suivante. J'ai eu quelques commentaires autour d'un bug, quand à ma grande horreur, j'ai mis un débogueur sur elle et a constaté que le MAX entre -5 et 0 -5!

NSString *test = @"short";
int calFailed = MAX(test.length - 10, 0);                      //returns -5

Après avoir regardé le MAX de macro, je vois qu'il exige à la fois des paramètres de même type. Dans mon cas, "test.longueur" est un unsigned int et 0 est une signature de type int. Ainsi, un simple cast (pour chaque paramètre) résout le problème.

NSString *test = @"short";
int calExpected = MAX((int)test.length - 10, 0);                    //returns 0

Cela semble être un méchant et inattendus de des effets secondaires de cette macro. Est-il une autre méthode intégrée à iOS pour effectuer des MIN/MAX, où le compilateur aurait mis en garde sur le décalage des types? Semble que ce DEVRAIT ont été un moment de la compilation problème et non pas quelque chose qui nécessitait un débogueur à comprendre. Je peux toujours écrire mon propre, mais je voulais voir si quelqu'un d'autre a eu des problèmes similaires.

  • Tu veux dire fmax?
  • Je vous remercie. Cela m'a aidé.
InformationsquelleAutor raider33 | 2013-04-29