c++ - que - lenguaje c pdf
¿Por qué todo el mundo escribe sobre los tipos C estándar? (4)
Si desea utilizar
Qt
, debe aceptar
quint8
,
quint16
, etc.
Si desea utilizar
GLib
, debe recibir
guint8
,
guint16
, etc.
En
Linux
hay
u32
,
s16
y demás.
uC / OS
define
SINT32
,
UINT16
y así sucesivamente.
Y si tiene que usar alguna combinación de esas cosas, es mejor que esté preparado para los problemas.
Debido a que en su máquina
u32
será
typedef
d durante
long
y
quint32
será
typedef
d over
int
y el compilador
se quejará
.
¿Por qué todos hacen esto si hay
<stdint.h>
?
¿Es esta una especie de tradición para las bibliotecas?
Para las bibliotecas más antiguas, esto es necesario porque el encabezado en cuestión (
stdint.h
) no existía.
Sin embargo, todavía hay un problema: esos tipos (
uint64_t
y otros) son
una característica opcional
en el estándar.
Por lo tanto, es posible que una implementación conforme no se envíe con ellos y, por lo tanto, obligue a las bibliotecas a incluirlos hoy en día.
stdint.h
no existía cuando estas bibliotecas se estaban desarrollando.
Entonces cada biblioteca hizo sus propios
typedef
s.
stdint.h
se ha estandarizado desde 1999. Es más probable que muchas aplicaciones definan (efectivamente alias) tipos para mantener una independencia parcial de la arquitectura subyacente de la máquina.
Proporcionan a los desarrolladores la confianza de que los tipos utilizados en su aplicación coinciden con los supuestos específicos del proyecto sobre el comportamiento que puede no coincidir con el estándar del lenguaje o la implementación del compilador.
La práctica se refleja en el patrón de diseño de Façade orientado a objetos y los desarrolladores abusan de ella invariablemente escribiendo clases de envoltura para todas las bibliotecas importadas.
Cuando los cumplidores eran mucho menos estándar y las arquitecturas de la máquina podían variar de mainframes de 16 bits, 18-bit a 36-bit esto era mucho más una consideración. La práctica es mucho menos relevante ahora en un mundo que converge en sistemas embebidos ARM de 32 bits. Sigue siendo una preocupación para los microcontroladores de gama baja con mapas de memoria odd .
Por lo tanto, tiene el poder de escribir typedef char en int.
Un "horror de codificación" mencionó que el encabezado de una compañía tenía un punto en el que un programador quería un valor booleano, y un char era el tipo lógico nativo para el trabajo, y así escribió
typedef bool char
.
Luego, más tarde, alguien descubrió que un número entero era la opción más lógica y escribió
typedef bool int
.
El resultado, años antes de Unicode, fue virtualmente
typedef char int
.
Pienso que hay mucha compatibilidad progresista y progresista.