Заголовок 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, которые также требуют поддержки компилятора).
vulcan raven

Ответы:

82

Оказывается, вы можете загрузить версию этого заголовка для MS по адресу:

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

Портативный можно найти здесь:

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

Спасибо блогу Software Rambling .

Роб
источник
13
Общественное достояние (не лицензия MIT / BSD - вам даже не нужно указывать
Michael Burr
Первая ссылка 404s
Matthew Moisen
Изменен исходный ответ, но: 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 unsigned __int64 uint64_t; ?
Роман А. Тайчер 05
1
И использовать буквальные значения uint64_t полезно в #define U64(u) (u##ui64)Windows и в #define U64(u) (u##ULL)противном случае.
Niklas
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
boost - это C ++, вопрос по C99
Remo.D
4
Непонятно - он спрашивает о заголовке C99 в Visual Studio, не указывая, какой язык он использует. В любом случае это не может быть C99, потому что Microsoft его не поддерживает.
Неманья Трифунович,
OP хочет копию <stdint.h>, а не заголовок Boost.
jww 01
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, авторизация по ссылке: имя пользователя: гость, пароль: guest123
JPaget
Всего 3 коммита, последний из которых датирован сентябрем 2006
AntoineL