diff --git a/lib/utils/printf.c b/lib/utils/printf.c
index 6822564f35388cc90e7448668a1fe2f12cf121c9..f09047d096271f8dd92e09b44320698106fd1bda 100644
--- a/lib/utils/printf.c
+++ b/lib/utils/printf.c
@@ -35,6 +35,7 @@
 #include "py/formatfloat.h"
 #endif
 
+#undef putchar  // Some stdlibs have a #define for putchar
 int printf(const char *fmt, ...);
 int vprintf(const char *fmt, va_list ap);
 int putchar(int c);
@@ -72,7 +73,6 @@ int DEBUG_printf(const char *fmt, ...) {
 #endif
 
 // need this because gcc optimises printf("%c", c) -> putchar(c), and printf("a") -> putchar('a')
-#undef putchar  // Some stdlibs have a #define for putchar
 int putchar(int c) {
     char chr = c;
     mp_hal_stdout_tx_strn_cooked(&chr, 1);