Я думаю, что один из ваших m
или i
- это size_t
или что-то в этом роде? Тогда второй аргумент макроса MAX
тоже равен size_t
. Возможно, это таким образом оценивается как (size_t)-1
?
В любом случае этот код выглядит подозрительно. Индексные массивы, такие как y[]
, которые вы должны будете преобразовать от char
до int
, пахнутые слабым шрифтом. Индексирование с помощью char
без учета возможных проблем с подписью просто опасно. Типы индексов всегда должны быть типами без знака.
Макрос, подобный вашему MAX
, который подразумевает, что оба выражения имеют одинаковую подпись и ширину, также опасен. Замените его на функцию intmax_t MAX(intmax_t, intmax_t)
или что-то в этом роде.
Правильно переработайте типы, и ваша проблема решится сама собой.
clang как компилятор достаточно хорош для отладки макросов. Кроме gcc, например, он может следить за расширением макросов и иногда может решить проблему с макросом.