Используйте stdint.h для минимального набора определений; используйте inttypes.h, если вам также нужна переносная поддержка для них в printf, scanf и др.
Ответ 2
stdint.h
Включение этого файла - это "минимальное требование", если вы хотите работать с целыми типами с указанной шириной C99 (т.е. "int32_t", "uint16_t" и т.д.).
Если вы включите этот файл, вы получите определения этих типов, чтобы вы могли использовать эти типы в объявлениях переменных и функций и выполнять операции с этими типами данных.
inttypes.h
Если вы включите этот файл, вы получите все, что stdint.h предоставляет (поскольку inttypes.h включает stdint.h), но вы также получите средства для выполнения printf и scanf (и "fprintf", "fscanf" и т.д.) с этими типами переносимым способом. Например, вы получите макрос "PRIu16", чтобы вы могли напечатать целое число uint16_t следующим образом:
#include <stdio.h>
#include <inttypes.h>
int main (int argc, char *argv[]) {
// Only requires stdint.h to compile:
uint16_t myvar = 65535;
// Requires inttypes.h to compile:
printf("myvar=%" PRIu16 "\n", myvar);
}