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.