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.


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 .


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

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


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



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


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.