es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué tantas bibliotecas definen sus propios enteros de ancho fijo?

Desde al menos C++11 contamos con encantadores enteros de ancho fijo, presentes en <cstdint> de C++ o en <stdint.h> de C, (por ejemplo, std::uint32_t, std::int8_t), ya sea con o sin el std:: al frente y también como macros para anchos mínimos (INT16_C, UINT32_C y demás).

Sin embargo, lidiamos con bibliotecas todos los días que definen sus propios enteros de ancho fijo y es posible que hayas visto, por ejemplo, sf::Int32, quint32, boost::uint32_t, Ogre::uint32, ImS32, … Podría seguir enumerándolos si quieres. Seguramente tú conoces algunos más también.

A veces, estos typedefs (también frecuentemente definidos como macros) pueden generar conflictos, por ejemplo, cuando se desea pasar un entero de ancho fijo std a una función de una biblioteca que espera un entero de ancho fijo con el mismo ancho, pero definido de manera diferente.

El punto de los enteros de ancho fijo es su tamaño fijo, que es lo que se necesita en muchas situaciones, como bien sabes. Entonces, ¿por qué todas estas bibliotecas crean typedefs para los mismos enteros que ya existen en el estándar de C++? Esos macros adicionales a veces son confusos, redundantes y pueden invadir tu código, lo cual es muy malo. Además, si no tienen el ancho y la signatura que prometen tener, al menos van en contra del principio de menor sorpresa. Entonces, ¿cuál es su punto? Te lo pregunto aquí y ahora.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C++, enteros de ancho fijo, puedo explicar por qué las bibliotecas definen sus propios enteros de ancho fijo a pesar de que ya están disponibles en el estándar de C++.

    La razón principal es la portabilidad. Aunque el estándar de C++ proporciona enteros de ancho fijo, no garantiza su disponibilidad en todas las plataformas. Las bibliotecas que buscan ser compatibles con múltiples plataformas o se dirigen a plataformas específicas que no proporcionan los enteros de ancho fijo del estándar de C++ pueden definir los suyos propios.

    Además, es posible que las bibliotecas se hayan desarrollado antes de que el estándar de C++ proporcionara enteros de ancho fijo, y la actualización de la base de código para utilizar los tipos estándar puede no ser factible. Además, las bibliotecas pueden elegir definir sus propios enteros de ancho fijo para mantener la coherencia dentro de su base de código o para coincidir con convenciones existentes dentro de dicha base de código.

    Sin embargo, el problema de conflictos, confusión y redundancia todavía puede surgir al utilizar estos enteros de ancho fijo definidos por las bibliotecas. Es importante que los desarrolladores gestionen cuidadosamente el uso de estos tipos y aseguren la compatibilidad al interactuar con el código que utiliza los tipos estándar.

Comments are closed.