"компилятор по умолчанию"?

А вот если avr-gcc, то можно создать
любое количество описателей потока
Код
int some_putchar(char c, FILE *stream);
FILE some_stream = FDEV_SETUP_STREAM(some_putchar, NULL, _FDEV_SETUP_WRITE);
и дальше пользоваться fprintf/fprintf_P/fputs/fputs_P/vfprintf_P ( &some_stream,
если при создании потока вторым параметром дать get-функцию, то и всем остальным стандартным.
Независимо и без передёргивания флагов.
А по поводу "printf только для отладки" - если в системе есть несколько текстовых потоков (текстовый протокол по UART, какой-нибудь термопринтер, ... и есть запас флеша/стека (а раз при отладке помещалось, значит есть) - то просто удобно пользоваться стандартными функциями везде.
Да и отладить многие куски форматирования/передачи можно через те же стандартные функции на персоналке.