Потому что ваш макрос неправильный. Очевидно, что это работает, но ошибка более тонкая (не совсем, но все же), поскольку у расширенного кода есть некоторые проблемы, не соответствующие ожидаемому порядку операций.
j = a(i+1)
расширится до j = i + 1 * i + 1
, что составляет 7
.
Если вы хотите решить вашу проблему, переопределите макрос как:
#define a(x) ((x)*(x))
Хорошо, что вы столкнулись с этой проблемой сейчас, а не позже. Ошибки такого типа иногда очень трудно отлаживать, но теперь вы будете знать, как писать «профессиональные» макросы:).