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.


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 .


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

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


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.)


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


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 ++.


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.