Да, он печатает GARBAGE, если вам не повезет.
ОЧЕНЬ ВАЖНО.
Тип аргумента printf / sprintf / fprintf ДОЛЖЕН соответствовать ассоциированному типу формата char.
Если типы не совпадают, и он компилируется, результаты очень неопределенные.
Многие новые компиляторы знают о printf и выдают предупреждения, если типы не совпадают. Если вы получили эти предупреждения, исправьте их.
Если вы хотите преобразовать типы для аргументов для переменных функций, вы должны предоставить приведение (т. Е. Явное преобразование), потому что компилятор не может понять, что преобразование необходимо выполнить (как это можно сделать с прототипом функции набранные аргументы).
printf("%d\n", (int) ch)
В этом примере printf сообщается, что в стеке есть «int». Приведение гарантирует, что независимо от того, что возвращает sizeof (обычно это какое-то длинное целое число), printf получит int.
printf("%d", (int) sizeof('\n'))