2009-05-26 21 views
29

Soy bastante nuevo en C++, pero ya conozco los fundamentos. Me he encontrado con el uso de "Uint32" (en varias mayúsculas) y tipos de datos similares al leer el código de otros, pero no encuentro ninguna documentación que los mencione. Entiendo que "Uint32" es una int sin firmar con 32 bits, pero mi compilador no. Estoy usando visual C++ express, y no reconoce ninguna forma de lo que puedo decir."Uint32", "int16" y similares; ¿son estándares C++?

¿Hay algunos compiladores que lean esos tipos de datos por defecto, o estos programadores los declararon ellos mismos como clases o #definir constantes?

Puedo ver un punto en su uso para saber exactamente cuánto tiempo será su número entero, ya que la declaración normal parece variar según el sistema. ¿Hay otros pros o contras usándolos?

Respuesta

11

Visual C++ no admite los tipos enteros de ancho fijo, porque no incluye compatibilidad con C99. Consulte las respuestas al my question on this subject para conocer las diversas opciones que tiene para usarlas.

+3

Muy agradable. Creo que usaré la biblioteca de impulso, ya que es una plataforma cruzada. Maldito microsoft y sus principios de do-it-their-own-way. – Zoomulator

+3

Microsoft no tiene la culpa: se adhieren estrictamente al estándar: C++ simplemente aún no tiene ningún tipo de número de tamaño fijo estandarizado. –

+1

Uso los tipos de impulso también. Microsoft finalmente admitirá estos tipos porque formarán parte del estándar C++. –

13

El archivo de encabezado C99 stdint.h define typedefs de esta naturaleza del formulario uint32_t. Hasta donde yo sé, C++ estándar no proporciona una versión cstdint de esto con los símbolos en el espacio de nombres std, pero algunos compiladores pueden, y normalmente podrás incluir el encabezado C99 desde el código C++ de todos modos. La próxima versión de C++ proporcionará el encabezado cstdint.

Es frecuente encontrar que el código de otras personas que utilizan las formas no convencionales de este tema, como Uint32_t o Uint32 o uint32 etc. Por lo general solo proporcionan una única cabecera que define este tipo dentro del proyecto. Probablemente este código se desarrolló originalmente hace mucho tiempo, y nunca se molestaron en sustituir las definiciones cuando los compiladores C99 se volvieron comunes.

+0

No menos importante porque MSVC no parece interesarse en los tipos: D –

1

Pruebe UINT32 para Microsoft.

La caja superior deja en claro que esto se define como una macro. Si intenta compilar usando un compilador diferente que aún no contiene la macro, puede definirlo usted mismo y su código no tiene que cambiar.

3

La razón principal para usarlas es que no tiene que preocuparse por posibles problemas que surgen al cambiar entre sistemas operativos de 64 bits y 32 bits.

Además, si está interactuando con cualquier código heredado que su nuevo dispositivo estaba destinado a 32 bits o incluso a 16 bits, entonces evita posibles problemas allí también.

+0

Eso es algo bueno a tener en cuenta cuando trabajo con proyectos multiplataforma, estoy seguro. – Zoomulator

+0

También son bastante útiles cuando se implementan aplicaciones distribuidas donde los enteros que se envían por cable entre el cliente y el servidor deben ser de un tamaño específico, según lo definido por su protocolo de comunicación. – Void

19

Las plataformas Unix definen estos tipos en stdint.h, este es el método preferido para garantizar el tamaño del texto cuando se escribe código portátil.

Las plataformas de Microsoft no definen este encabezado, lo cual es un problema cuando se usa una plataforma cruzada. Si no está usando Boost Integer Library ya, recomiendo obtener la implementación de este encabezado de Paul Hsieh portable stdint.h para usar en plataformas Microsoft.

Actualización: Visual Studio 2010 y posteriores definen este encabezado.

1

uint32 y col. están definidos por macros. Resuelven un problema histórico de portabilidad de que hay pocas garantías en todas las plataformas (cuando hay más opciones de plataforma que ahora) de cuántos bits obtendría cuando solicitó un int o un short. (Una compilación de C ahora difunta para el Mac proporcionó pantalones cortos de 8 bits).

Cuestiones relacionadas