2008-09-24 22 views
106

À ma grande surprise, je viens de découvrir que le C99 stdint.h est absent de MS Visual Studio 2003 vers le haut. Je suis sûr qu'ils ont leurs raisons, mais est-ce que quelqu'un sait où je peux télécharger une copie? Sans cette tête, je n'ai pas de définitions pour les types utiles tels que uint32_t, etc.C99 stdint.h en-tête et MS Visual Studio

+38

Comme une mise à jour à ceci: MSVC 2010 inclut maintenant 'stdint.h' –

+3

aussi bien que . –

+0

En passant par ce blog: http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx, * VS 2015 Preview prend entièrement en charge la bibliothèque standard C99 (les seules omissions étant tgmath.h, qui nécessite la magie du compilateur C et n'est pas pertinente pour C++ qui a une surcharge, et CX_LIMITED_RANGE/FP_CONTRACT qui nécessitent également le support du compilateur). * –

Répondre

79

Turns out, vous pouvez télécharger une version MS de cet en-tête de:

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

un portable se trouve ici:

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

Merci au blog du Software Rambling.

+11

stdint.h pour MSVC (une version légèrement modifiée de MinGW): http: // snipplr.com/view/18199/stdinth/ –

+0

Le premier lien 404s –

+0

Modifié la réponse originale mais: https://github.com/mattn/gntp-send/blob/master/include/msinttypes/stdint.h le lien svn est mort – smaudet

21

Visual Studio 2003 - 2008 (Visual C++ 7.1 - 9) ne prétendent pas être compatibles C99. (Merci à rdentato pour son commentaire.)

44

Définissez-les vous-même.

#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

Ai-je manqué quelque chose ou ne devrait-il pas être typedef unsigned __int64 uint64_t; ? –

+0

@Roman A. Taycher: Édité pour changer '__int32' en' __int64'. –

+20

Vous semblez en avoir manqué quelques uns ... –

11

Boost contient le fichier d'en-tête de cstdint.hpp avec les types que vous recherchez: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

+1

boost est C++, la question est sur C99 –

+4

Il n'est pas clair - il pose une question sur un en-tête C99 dans Visual Studio, sans spécifier quelle langue il utilise. En tout cas, il ne peut pas s'agir de C99 car Microsoft ne le supporte pas. –

+0

OP veut une copie de '', pas un en-tête Boost. – jww

5

Microsoft ne prennent pas en charge C99 et n'a pas annoncé de plans à. Je crois qu'ils ont l'intention de suivre les normes C++ mais considèrent que C est effectivement obsolète sauf en tant que sous-ensemble de C++.

Les nouveaux projets dans Visual Studio 2003 et versions ultérieures ont l'option "Compiler en tant que code C++ (/ TP)" définie par défaut, ainsi tous les fichiers .c seront compilés en C++.

4

Une autre solution portable:

POSH: Le portable Open Source Harnais

« POSH est un simple, portable, facile à utiliser, facile à intégrer, flexible, open source "harnais" Conçu pour rendre l'écriture de bibliothèques et d'applications multiplateformes moins fastidieuses à créer et à mettre en communication.

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

comme décrit et utilisé dans le livre: Ecrire un code portable: une introduction à développer des logiciels pour plusieurs plates-formes par Brian Crochet http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

+1

link Autorisation requise – CiNN

+1

De l'article de Poshlib Wikipedia, l'autorisation de lien est: nom d'utilisateur: invité, mot de passe: guest123 – JPaget

+0

Grand total de 3 commits, le dernier daté de septembre 2006 – AntoineL

43

Mise à jour: visuelle Studio 2010 et Visual C++ 2010 Express ont tous les deux stdint.h. Il peut être trouvé dans C:\Program Files\Microsoft Visual Studio 10.0\VC\include

+2

De même que pour les utilisateurs de C++ qui l'aiment dans 'std :: '. –