різниця між stdint.h та inttypes.h


78

У чому різниця між stdint.h та inttypes.h?

Якщо жоден з них не використовується, uint64_t не розпізнається, але для будь-якого з них це визначений тип.


3
inttypes.h #includes stdint.h .
Mr. Shickadance,

Відповіді:


24

Дивіться статтю Вікіпедії для inttypes.h.

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


25
Я прийшов до StackOverflow , щоб дізнатися різницю між stdint.h і inttypes.h після прочитання вікі - статті , яка говорить мені , що (і) intN_t доступний в обох. То яка різниця? Що я повинен включити?
Дейв

7
<inttypes.h> включає <stdint.h> та додає деякі макроси printf. Дивіться відповідь Мікко Естлунда нижче.
Едвард Фальк

Я отримую:fatal error: inttypes.h: No such file or directory
m4l490n

152

stdint.h

У тому числі і цей файл є «мінімальним вимогою» , якщо ви хочете працювати із заданою шириною цілих типів C99 (тобто int32_t, і uint16_tт.д.). Якщо ви включите цей файл, ви отримаєте визначення цих типів , так що ви зможете використовувати ці типи в деклараціях змінних та функцій і виконувати операції з цими типами даних.

inttypes.h

Якщо включити цей файл, ви отримаєте все , що stdint.h забезпечує (бо inttypes.h включає stdint.h), але ви також отримаєте кошти для ведення printfіscanffprintf, fscanfі так далі.) З цими типами в портативному шлях. Наприклад, ви отримаєте PRIu64макрос, щоб ви могли printfзробити uint64_tтаке:

Одна з причин , ви хотіли б використовувати printfз inttypes.h тому, що, наприклад, uint64_tзнаходиться long unsignedв Linux , а uint64_tце long long unsignedв Windows. Отже, якщо ви повинні написати вищезазначений код і зберегти його перехресну сумісність між Linux і Windows, ви зробите наступне:


6
Дякую, це була чудова відповідь (хоча я не задавав оригінального питання!). Щоб додати відповідь Мікко, inttypes.h копіює в stdint.h (через препроцесор #include). Принаймні в моїй системі Linux (GCC 4.5.2 та подібні).
pr1268
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.