Este bucle se repite mientras que C sea menor o igual que 'Z', eso sí, en cada iteración estás decrementando c. El tipo char es con signo, esto quiere decir que tiene 255 valores positivos, el 0 y 256 valores negativos. Si miras la tabla ASCII verás que los primeros caracteres de la tabla no son imprimibles. Y que pasa con los negativos? Si has visto cómo se almacenan los números en la memoria entenderás que un mismo binario se puede interpretar de diferentes maneras (con signo, sin el, con mantisa y exponente, BCD, ...). El programa va a buscar un carácter a mostrar y dado que las tablas no tienen valores negativos, convertirá el número en unsigned. Cuando C alcance el valor -256 y le toque decrementarse pasará a valer 255, pasará a ser mayor que 'Z' y te saldrás del bucle.
El bucle no es infinito simplemente porque en algún momento se deja de cumplir la condición necesaria para repetirse.
Si lo que quieres es que el bucle vaya de Z a A tienes que dejarlo así
Un saludo.