En-tête C99 stdint.h et MS Visual Studio

113

À ma grande stupéfaction, je viens de découvrir que le stdint.h C99 est absent de MS Visual Studio 2003 à partir de. 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 cet en-tête, je n'ai pas de définitions pour les types utiles tels que uint32_t, etc.

Rob
la source
41
En guise de mise à jour: MSVC 2010 inclut désormaisstdint.h
Michael Burr
En suivant ce blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , 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 pertinent pour C ++ qui a une surcharge, et CX_LIMITED_RANGE / FP_CONTRACT qui nécessitent également le support du compilateur).
Vulcan Raven

Réponses:

82

Il s'avère que vous pouvez télécharger une version MS de cet en-tête à partir de:

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

Un portable peut être trouvé ici:

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

Merci au blog de Software Rambling .

Rob
la source
13
Un domaine public (pas une licence MIT / BSD - vous n'avez même pas besoin de conserver une attribution de copyright) stdint.h pour MSVC (une version légèrement modifiée de MinGW): snipplr.com/view/18199/stdinth
Michael Burr
Le premier lien 404s
Matthew Moisen
Modification de la réponse d'origine mais: github.com/mattn/gntp-send/blob/master/include/msinttypes/… le lien svn est mort
smaudet
46

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
Nicolas Mancuso
la source
4
Est-ce que je manque quelque chose ou ne devrait-il pas être typedef unsigned __int64 uint64_t; ?
Roman A. Taycher
1
Et pour utiliser des valeurs uint64_t littérales, il est utile #define U64(u) (u##ui64)sous Windows et #define U64(u) (u##ULL)autrement.
Niklas
45

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

Ashwin Nanjappa
la source
3
Ainsi que <cstdint> pour les utilisateurs C ++ qui l'aiment dans std::.
Adrian McCarthy
23

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

Adam Mitz
la source
11

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

Nemanja Trifunovic
la source
1
boost est C ++, la question est sur C99
Remo.D
4
Ce n'est pas clair - il pose des questions sur un en-tête C99 dans Visual Studio, sans spécifier la langue qu'il utilise. Dans tous les cas, il ne peut pas s'agir de C99 car Microsoft ne le prend pas en charge.
Nemanja Trifunovic
OP veut une copie <stdint.h>, pas un en-tête Boost.
jww
5

Microsoft ne prend pas en charge C99 et n'a annoncé aucun projet de le faire. Je pense qu'ils ont l'intention de suivre les normes C ++ mais considèrent C comme 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, de sorte que tous les fichiers .c seront compilés en C ++.

Mike Dimmick
la source
4

Une autre solution portable:

POSH: le harnais Open Source portable

"POSH est un" harnais "open source simple, portable, facile à utiliser, facile à intégrer, flexible, conçu pour rendre l'écriture de bibliothèques et d'applications multiplateformes beaucoup moins fastidieuse à créer et à porter."

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

comme décrit et utilisé dans le livre: Écrire du code portable: une introduction au développement de logiciels pour plusieurs plates-formes Par Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

Jason Harrison
la source
1
De l'article de Poshlib Wikipedia, l'autorisation de lien est: nom d'utilisateur: invité, mot de passe: guest123
JPaget
Grand total de 3 commits, le dernier daté de septembre 2006
AntoineL