C99 stdint.h Header und MS Visual Studio

113

Zu meinem Erstaunen habe ich gerade festgestellt, dass die C99 stdint.h ab MS Visual Studio 2003 fehlt. Ich bin mir sicher, dass sie ihre Gründe haben, aber weiß jemand, wo ich eine Kopie herunterladen kann? Ohne diesen Header habe ich keine Definitionen für nützliche Typen wie uint32_t usw.

rauben
quelle
41
Als Update dazu: MSVC 2010 enthält jetztstdint.h
Michael Burr
In diesem Blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/… unterstützt VS 2015 Preview die C99-Standardbibliothek vollständig (mit den einzigen Auslassungen ist tgmath.h, für das C-Compiler-Magie und erforderlich sind ist nicht relevant für C ++ mit Überladung und CX_LIMITED_RANGE / FP_CONTRACT, für die ebenfalls Compilerunterstützung erforderlich ist.
Vulkanischer Rabe

Antworten:

82

Es stellt sich heraus, dass Sie eine MS-Version dieses Headers herunterladen können von:

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

Eine tragbare finden Sie hier:

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

Vielen Dank an den Blog von Software Rambling .

rauben
quelle
13
Eine gemeinfreie Domain (keine MIT / BSD-Lizenz - Sie müssen nicht einmal eine Urheberrechtsangabe behalten) stdint.h für MSVC (eine leicht modifizierte Version von MinGW): snipplr.com/view/18199/stdinth
Michael Burr
Der erste Link 404s
Matthew Moisen
Die ursprüngliche Antwort wurde geändert, aber: github.com/mattn/gntp-send/blob/master/include/msinttypes/… der SVN-Link ist tot
smaudet
46

Definieren Sie sie einfach selbst.

#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
quelle
4
Vermisse ich etwas oder sollte es nicht typedf unsigned sein __int64 uint64_t; ?
Roman A. Taycher
1
Und um literale uint64_t-Werte zu verwenden, ist es nützlich, #define U64(u) (u##ui64)unter Windows und auf #define U64(u) (u##ULL)andere Weise.
Niklas
45

Update: Visual Studio 2010 und Visual C ++ 2010 Express haben beide stdint.h. Es kann in gefunden werdenC:\Program Files\Microsoft Visual Studio 10.0\VC\include

Ashwin Nanjappa
quelle
3
Sowie <cstdint> für C ++ - Benutzer, denen es gefällt std::.
Adrian McCarthy
23

Visual Studio 2003 - 2008 (Visual C ++ 7.1 - 9) erhebt keinen Anspruch auf C99-Kompatibilität. (Danke an rdentato für seinen Kommentar.)

Adam Mitz
quelle
11

Boost enthält die Header-Datei cstdint.hpp mit den gesuchten Typen: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

Nemanja Trifunovic
quelle
1
Boost ist C ++, die Frage ist auf C99
Remo.D
4
Es ist nicht klar - er fragt nach einem C99-Header in Visual Studio, ohne anzugeben, welche Sprache er verwendet. In jedem Fall kann es nicht C99 sein, da Microsoft es nicht unterstützt.
Nemanja Trifunovic
OP möchte eine Kopie von <stdint.h>, keinen Boost-Header.
JWW
5

Microsoft unterstützt C99 nicht und hat keine Pläne dazu angekündigt. Ich glaube, sie beabsichtigen, C ++ - Standards zu verfolgen, betrachten C jedoch als effektiv veraltet, außer als Teilmenge von C ++.

Bei neuen Projekten in Visual Studio 2003 und höher ist die Option "Als C ++ - Code (/ TP) kompilieren" standardmäßig festgelegt, sodass alle .c-Dateien als C ++ kompiliert werden.

Mike Dimmick
quelle
4

Eine weitere tragbare Lösung:

POSH: Der tragbare Open Source-Kabelbaum

"POSH ist ein einfaches, tragbares, benutzerfreundliches, leicht zu integrierendes, flexibles Open-Source-" Harness ", mit dem das Schreiben plattformübergreifender Bibliotheken und Anwendungen erheblich einfacher zu erstellen und zu portieren ist."

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

wie im Buch beschrieben und verwendet: Schreiben Sie tragbaren Code: eine Einführung in die Entwicklung von Software für mehrere Plattformen Von Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

Jason Harrison
quelle
1
Aus dem Wikipedia-Artikel von Poshlib lautet die
Linkautorisierung
Insgesamt 3 Commits, letzter vom September 2006
AntoineL