Да, если вы используете новые типы, вы действительно должны использовать спецификаторы нового формата.
Это лучший способ сделать это с тех пор, как реализация уже проделала работу, чтобы гарантировать, что строки формата будут корректными для типов.
Так, например:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main (void) {
int32_t i32 = 40000;
printf ("%d\n", i32); // might work.
printf ("%" PRId32 "\n", i32); // will work.
return 0;
}
показывает как способы сделать это.
Однако на самом деле есть нет гарантия того, что первый сделает то, что вы ожидаете. Например, в системе с 16-разрядными типами int
вы можете получить другое значение.