Заголовок C99 stdint.h та MS Visual Studio


113

На мій подив, я щойно виявив, що C99 stdint.h відсутній у MS Visual Studio 2003 вгору. Я впевнений, що вони мають свої причини, але хтось знає, де я можу завантажити копію? Без цього заголовка у мене немає визначень для корисних типів, таких як uint32_t тощо.


41
Як оновлення до цього: MSVC 2010 тепер включаєstdint.h
Майкл Берр

Проходячи по цьому блогу: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview повністю підтримує стандартну бібліотеку C99 (єдині упущення - tgmath.h, для чого потрібна магія компілятора C і не стосується C ++, який має перевантаження, і CX_LIMITED_RANGE / FP_CONTRACT, які також потребують підтримки компілятора).
вулкан ворон

Відповіді:


82

Виявляється, ви можете завантажити MS-версію цього заголовка з:

https://github.com/mattn/gntp-send/blob/master/include/msinttypes/stdint.h

З портативним можна знайти тут:

http://www.azillionmonkeys.com/qed/pstdint.h

Завдяки блогу програмного забезпечення Ramming s.


13
Загальнодоступний домен (не ліцензія на MIT / BSD - вам навіть не потрібно зберігати авторське право на авторське право) stdint.h для MSVC (трохи змінена версія від MinGW): snipplr.com/view/18199/stdinth
Майкл Берр

Перше посилання 404s
Меттью Мойсен

Змінено оригінальну відповідь, але: github.com/mattn/gntp-send/blob/master/include/msinttypes/… посилання svn померло
smaudet

46

Просто визначте їх самостійно.

#ifdef _MSC_VER

typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;

#else
#include <stdint.h>
#endif

4
Я щось пропускаю чи не повинен це бути typedef без підпису __int64 uint64_t; ?
Роман А. Тейчер

1
І використовувати буквальні значення uint64_t, корисно в #define U64(u) (u##ui64)Windows та #define U64(u) (u##ULL)інше.
Ніклас

45

Оновлення: Visual Studio 2010 та Visual C ++ 2010 Express мають обидва stdint.h. Його можна знайти вC:\Program Files\Microsoft Visual Studio 10.0\VC\include


3
А також <cstdint> для користувачів C ++, яким це подобається std::.
Адріан Маккарті

23

Visual Studio 2003 - 2008 (Visual C ++ 7.1 - 9) не претендує на сумісність із C99. (Дякую rdentato за його коментар.)


11

Boost містить файл заголовка cstdint.hpp з типами, які ви шукаєте: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp


1
прискорення C ++, питання на C99
Remo.D

4
Незрозуміло - він запитує про заголовок C99 у Visual Studio, не вказуючи, якою мовою він користується. У будь-якому випадку це не може бути C99, оскільки Microsoft не підтримує його.
Неманья Трифунович

ОП хоче копію <stdint.h>, а не заголовок Boost.
jww

5

Microsoft не підтримує C99 і не оголошує жодних планів. Я вважаю, що вони мають намір відстежувати стандарти C ++, але вважають C ефективно застарілим, за винятком як підмножини C ++.

У нових проектах у Visual Studio 2003 та пізніших версіях за замовчуванням встановлена ​​опція "Компілювати як код C ++ (/ TP)", тому будь-які файли .c будуть компілюватися як C ++.


4

Ще одне портативне рішення:

POSH: Портативний джгут із відкритим кодом

"POSH - це простий, портативний, простий у використанні, простий в інтеграції, гнучкий," джгут "з відкритим кодом, призначений для того, щоб зробити письмові бібліотеки та додатки між платформами значно менш виснажливими для створення та порту".

http://poshlib.hookatooka.com/poshlib/trac.cgi

як описано та використано в книзі: Написати переносний код: вступ до розробки програмного забезпечення для декількох платформ Брайан Хук http://books.google.ca/books?id=4VOKcEAPPO0C

-Язон


1
Із статті Poshlib Wikipedia авторизація посилання: ім'я користувача: гість, пароль: guest123
JPaget

Загальна сума - 3 коміти, останній - вересень 2006 р.
AntoineL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.