Printf on Arduino

it's convoluted but on AVR you can do something like this

FILE f_out;

int sput(char c, __attribute__((unused)) FILE* f) {return !Serial.write(c);}

void setup() {
  Serial.begin(115200);
  fdev_setup_stream(&f_out, sput, nullptr, _FDEV_SETUP_WRITE); // cf https://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gaf41f158c022cbb6203ccd87d27301226
  stdout = &f_out;
  printf("Hello world, the answer is %d (or 0x%02X)!\n", 42, 42);
}

void loop() {}