Nagłówek C99 stdint.h i MS Visual Studio

113

Ku mojemu zdumieniu właśnie odkryłem, że od wersji MS Visual Studio 2003 w górę brakuje C99 stdint.h. Jestem pewien, że mają swoje powody, ale czy ktoś wie, skąd mogę pobrać kopię? Bez tego nagłówka nie mam definicji przydatnych typów, takich jak uint32_t itp.

Obrabować
źródło
41
W ramach aktualizacji: MSVC 2010 zawiera terazstdint.h
Michael Burr,
Przechodząc przez ten blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview w pełni obsługuje bibliotekę standardową C99 (z jedynymi pominięciami to tgmath.h, który wymaga magii kompilatora C i nie dotyczy C ++, który ma przeciążenie, i CX_LIMITED_RANGE / FP_CONTRACT, które również wymagają obsługi kompilatora).
Vulcan Raven

Odpowiedzi:

82

Okazuje się, że możesz pobrać wersję MS tego nagłówka z:

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

Przenośny można znaleźć tutaj:

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

Dzięki blogowi Software Rambling .

Obrabować
źródło
13
Domena publiczna (nie licencja MIT / BSD - nie musisz nawet zachowywać informacji o prawach autorskich) stdint.h dla MSVC (nieco zmodyfikowana wersja z MinGW): snipplr.com/view/18199/stdinth
Michael Burr
Pierwszy link 404s
Matthew Moisen
Zmodyfikowano oryginalną odpowiedź, ale: github.com/mattn/gntp-send/blob/master/include/msinttypes/ ... link svn jest martwy
smaudet
46

Po prostu zdefiniuj je samodzielnie.

#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
Nicholas Mancuso
źródło
4
Czy czegoś brakuje lub nie powinno to być typedef unsigned __int64 uint64_t; ?
Roman A. Taycher,
1
I używanie dosłownych wartości uint64_t jest przydatne #define U64(u) (u##ui64)w systemie Windows i w #define U64(u) (u##ULL)innych przypadkach.
Niklas,
45

Aktualizacja: Visual Studio 2010 i Visual C ++ 2010 Express mają stdint.h. Można go znaleźć wC:\Program Files\Microsoft Visual Studio 10.0\VC\include

Ashwin Nanjappa
źródło
3
Jak również <cstdint> dla użytkowników C ++, którzy lubią to w std::.
Adrian McCarthy
23

Visual Studio 2003-2008 (Visual C ++ 7.1 - 9) nie twierdzi, że jest zgodny z C99. (Dzięki rdentato za komentarz.)

Adam Mitz
źródło
11

Boost zawiera plik nagłówkowy cstdint.hpp z typami, których szukasz: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

Nemanja Trifunovic
źródło
1
boost to C ++, pytanie jest na C99
Remo.D
4
Nie jest jasne - pyta o nagłówek C99 w Visual Studio, bez sprecyzowania, jakiego języka używa. W każdym razie nie może to być C99, ponieważ Microsoft go nie obsługuje.
Nemanja Trifunovic
OP chce kopii <stdint.h>, a nie nagłówka Boost.
jww
5

Microsoft nie obsługuje C99 i nie ogłosił żadnych planów. Uważam, że zamierzają śledzić standardy C ++, ale uważają C za faktycznie przestarzałe, z wyjątkiem podzbioru C ++.

Nowe projekty w programie Visual Studio 2003 i nowszych mają domyślnie ustawioną opcję „Kompiluj jako kod C ++ (/ TP)”, więc wszystkie pliki .c zostaną skompilowane jako C ++.

Mike Dimmick
źródło
4

Inne przenośne rozwiązanie:

POSH: Przenośna uprząż Open Source

„POSH to prosta, przenośna, łatwa w użyciu, łatwa do integracji, elastyczna„ wiązka ”typu open source, zaprojektowana w celu znacznie mniej uciążliwego tworzenia i przenoszenia bibliotek i aplikacji międzyplatformowych.”

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

jak opisano i użyto w książce: Pisanie kodu przenośnego: wprowadzenie do tworzenia oprogramowania na wiele platform Autor: Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

Jason Harrison
źródło
1
Z artykułu Poshlib w Wikipedii, autoryzacja linku to: nazwa użytkownika: gość, hasło: gość123
JPaget
Całkowita suma 3 zatwierdzeń, ostatni z września 2006
AntoineL