Разница между stdint.h и inttypes.h - PullRequest
       45

Разница между stdint.h и inttypes.h

68 голосов
/ 29 сентября 2011

В чем разница между stdint.h и inttypes.h?

Если ни один из них не используется, uint64_t не распознается, но с любым из них это определенный тип.

Ответы [ 2 ]

136 голосов
/ 06 февраля 2012

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);  
}
19 голосов
/ 29 сентября 2011

См. Статью в Википедии для inttypes.h.

Используйте stdint.h для минимального набора определений; используйте inttypes.h, если вам также нужна портативная поддержка для них в printf, scanf и др.

...