C99 stdint.h encabezado y MS Visual Studio

113

Para mi sorpresa, acabo de descubrir que C99 stdint.h falta en MS Visual Studio 2003 en adelante. Estoy seguro de que tienen sus razones, pero ¿alguien sabe dónde puedo descargar una copia? Sin este encabezado, no tengo definiciones para tipos útiles como uint32_t, etc.

Robar
fuente
41
Como actualización de esto: MSVC 2010 ahora incluyestdint.h
Michael Burr
A partir de este blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview es totalmente compatible con la biblioteca estándar C99 (con las únicas omisiones que son tgmath.h, que requiere la magia del compilador C y no es relevante para C ++ que tiene sobrecarga, y CX_LIMITED_RANGE / FP_CONTRACT que también requiere soporte de compilador).
cuervo vulcano

Respuestas:

82

Resulta que puedes descargar una versión para MS de este encabezado desde:

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

Puede encontrar uno portátil aquí:

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

Gracias al blog de Software Rambling .

Robar
fuente
13
Un dominio público (no una licencia MIT / BSD, ni siquiera necesita mantener una atribución de derechos de autor) stdint.h para MSVC (una versión ligeramente modificada de MinGW): snipplr.com/view/18199/stdinth
Michael Burr
El primer enlace 404s
Matthew Moisen
Se modificó la respuesta original pero: github.com/mattn/gntp-send/blob/master/include/msinttypes/… el enlace svn está muerto
smaudet
46

Solo defínalos usted mismo.

#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
Nicolás Mancuso
fuente
4
¿Me falta algo o no debería ser typedef unsigned __int64 uint64_t; ?
Roman A. Taycher
1
Y para usar valores uint64_t literales es útil #define U64(u) (u##ui64)en Windows y en #define U64(u) (u##ULL)otros casos .
Niklas
45

Actualización: Visual Studio 2010 y Visual C ++ 2010 Express tienen stdint.h. Se puede encontrar enC:\Program Files\Microsoft Visual Studio 10.0\VC\include

Ashwin Nanjappa
fuente
3
Además de <cstdint> para usuarios de C ++ a los que les guste en std::.
Adrian McCarthy
23

Visual Studio 2003 - 2008 (Visual C ++ 7.1 - 9) no pretende ser compatible con C99. (Gracias a rdentato por su comentario).

Adam Mitz
fuente
11

Boost contiene un archivo de encabezado cstdint.hpp con los tipos que está buscando: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

Nemanja Trifunovic
fuente
1
boost es C ++, la pregunta está en C99
Remo.D
4
No está claro: pregunta sobre un encabezado C99 en Visual Studio, sin especificar qué idioma está usando. En cualquier caso, no puede ser C99 porque Microsoft no lo admite.
Nemanja Trifunovic
OP quiere una copia de <stdint.h>, no un encabezado de Boost.
jww
5

Microsoft no es compatible con C99 y no ha anunciado planes para hacerlo. Creo que tienen la intención de realizar un seguimiento de los estándares de C ++, pero consideran que C es efectivamente obsoleto, excepto como un subconjunto de C ++.

Los proyectos nuevos en Visual Studio 2003 y posteriores tienen la opción "Compilar como código C ++ (/ TP)" establecida de forma predeterminada, por lo que cualquier archivo .c se compilará como C ++.

Mike Dimmick
fuente
4

Otra solución portátil:

POSH: el arnés portátil de código abierto

"POSH es un" arnés "de código abierto simple, portátil, fácil de usar, fácil de integrar y flexible, diseñado para hacer que la escritura de bibliotecas y aplicaciones multiplataforma sea mucho menos tediosa de crear y portar".

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

como se describe y se usa en el libro: Escribir código portátil: una introducción al desarrollo de software para múltiples plataformas Por Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

Jason Harrison
fuente
1
Del artículo de Wikipedia de Poshlib, la autorización del enlace es: nombre de usuario: invitado, contraseña: invitado123
JPaget
Gran total de 3 confirmaciones, la última de septiembre de 2006
AntoineL