У меня был код в моем приложении, который выглядит следующим образом. Я получил некоторую обратную связь вокруг ошибки, когда, к моему ужасу, я положил на нее отладчик и обнаружил, что МАКСИМАЛЬНОЕ между -5 и 0 -5!
NSString *test = @"short";
int calFailed = MAX(test.length - 10, 0); // returns -5
Посмотрев на макрос MAX, я вижу, что он требует, чтобы оба параметра были одного типа. В моем случае "test.length" - это unsigned int, а 0 - подписанный int. Таким образом, простая задача (для любого параметра) устраняет проблему.
NSString *test = @"short";
int calExpected = MAX((int)test.length - 10, 0); // returns 0
Это кажется неприятным и неожиданным побочным эффектом этого макроса. Есть ли другой встроенный метод для iOS для выполнения MIN/MAX, где компилятор предупреждал бы о несовпадающих типах? Кажется, что это СЛЕДУЕТ была проблема времени компиляции, а не то, что требовало отладчика, чтобы понять. Я всегда могу написать свои собственные, но хотел бы увидеть, есть ли у кого-нибудь другие подобные проблемы.