Если вы хотите сделать все в операторе while, вы можете написать
while (*a != '\0' && *a++ == *b++) {}
Лично я не большой поклонник этого стиля программирования - читатели все равно должны мысленно «распаковать» порядок операций, пытаясь понять его (и выяснить, если код содержит ошибки или нет). Ошибки памяти особенно коварны в C, где перезапись памяти на один байт выше или раньше, где вы должны вызывать всевозможные необъяснимые сбои или ошибки намного позже, в отличие от первоначальной причины.
Современные стили программирования на С подчеркивают правильность, последовательность и дисциплину больше, чем краткость. Функции кратких выражений, такие как операции до и после приращения, изначально были способом заставить компилятор генерировать лучший машинный код, но оптимизаторы могут легко сделать это сами в наши дни.
Как пишет @sbi, я бы предпочел const char *
аргументы вместо простых char *
аргументов.