2008-09-24 13 views
106

Para mi sorpresa, descubrí que el C99 stdint.h no se encuentra en MS Visual Studio 2003 en adelante. Estoy seguro de que tienen sus razones, pero ¿alguien sabe dónde puedo descargar una copia? Sin esta cabecera que no tienen una definición para este tipo de útiles, tales como uint32_t, etc.C99 stdint.h encabezado y MS Visual Studio

+38

Como una actualización de esto: MSVC 2010 ahora incluye 'stdint.h' –

+3

así como . –

+0

Pasando por este blog: http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx, * VS 2015 Preview es totalmente compatible con la biblioteca estándar C99 (con las únicas omisiones es tgmath.h, que requiere magia del compilador C y no es relevante para C++ que tiene sobrecarga, y CX_LIMITED_RANGE/FP_CONTRACT que también requieren compatibilidad con el compilador). * –

Respuesta

79

Resulta que se puede descargar una versión de MS de esta cabecera de:

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

un portátil se puede encontrar aquí:

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

Gracias al blog del Software Rambling s.

+11

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): http: // snipplr.com/view/18199/stdinth/ –

+0

El primer enlace 404s –

+0

Modificó la respuesta original pero: https://github.com/mattn/gntp-send/blob/master/include/msinttypes/stdint.h el enlace svn está muerto – smaudet

21

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

44

Simplemente defínalas tú 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 
+4

Me falta algo o no debería ser typedef unsigned __int64 uint64_t; ? –

+0

@Roman A. Taycher: Editado para cambiar '__int32' a' __int64'. –

+20

Parece que le faltan algunas ... –

11

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

+1

boost es C++, la pregunta está en C99 –

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

+0

OP quiere una copia de '', no un encabezado de Boost. – jww

5

Microsoft no son compatibles con C99 y no han anunciado ningún plan a. Creo que pretenden rastrear 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 posterior tienen la opción "Compilar como código C++ (/ TP)" establecida de forma predeterminada, por lo que cualquier archivo .c se compilará como C++.

4

Otra solución portátil:

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

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

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

como se describe y se utiliza 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

+1

link Autorización requerida – CiNN

+1

Desde el artículo de Poshlib Wikipedia, la autorización del enlace es: nombre de usuario: invitado, contraseña: guest123 – JPaget

+0

Gran total de 3 confirmaciones, la última de septiembre de 2006 – AntoineL

43

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

+2

así como para usuarios de C++ a los que les gusta en 'std :: '. –

Cuestiones relacionadas