sentencias para libro instrucciones for español dummies dev curso completo comandos codigos básico avanzado c++ types c99

para - ¿Cuál es el equivalente en C++ de UINT32_MAX?



libro de c++ completo (5)

Bueno, uint32_t siempre será de 32 bits, y siempre estará sin firmar, por lo que puedes definirlo manualmente de forma segura:

#define UINT32_MAX (0xffffffff)

También puedes hacer

#define UINT32_MAX ((uint32_t)-1)

En C99, incluyo stdint.h y eso me da UINT32_MAX y uint32_t. Sin embargo, en C ++, el UINT32_MAX se define. Puedo definir __STDC_LIMIT_MACROS antes de incluir stdint.h, pero esto no funciona si alguien está incluyendo mi encabezado después de haber incluido stdint.h.

Entonces en C ++, ¿cuál es la forma estándar de descubrir el valor máximo representable en uint32_t?


Puede eliminar los problemas de orden #include cambiando el proceso de compilación para definir el símbolo __STDC_LIMIT_MACROS en la línea de comandos del compilador:

cxx -D__STDC_LIMIT_MACROS ...

Por supuesto, aún tendría problemas si un encabezado #undef es este símbolo.

Además, es posible que los autores de la implementación de la biblioteca estándar que está utilizando no tengan la intención de que los usuarios configuren ese símbolo en particular; puede haber un indicador del compilador o un símbolo diferente que los usuarios deben usar para habilitar los tipos C99 en C ++.


std::numeric_limits<T>::max() define el valor máximo para el tipo T


Bueno, no sé sobre uint32_t pero para los tipos fundamentales ( bool, char, signed char, unsigned char, wchar_t, short, unsigned short, int, unsigned int, long, unsigned long, float, double and long double ) debería usar las plantillas numeric_limits través de #include <limits> .

cout << "Minimum value for int: " << numeric_limits<int>::min() << endl; cout << "Maximum value for int: " << numeric_limits<int>::max() << endl;

Si uint32_t es un #define de uno de los anteriores, este código debería funcionar de la caja

cout << "Maximum value for uint32_t: " << numeric_limits<uint32_t>::max() << endl;


No puedo comentar, así que aquí está mi opinión sobre la respuesta de Glen vs Lior Kogan.

Si está utilizando variables estáticas, se encontrará con el problema de que si asigna un valor constante dentro de una clase a numeric_limits :: max () ese valor se establecerá de hecho en cero debido al orden de inicialización (consulte la inicialización cero de esta publicación) e inicialización estática de la variable estática de alcance local )

Entonces, en ese caso, solo funcionará usando la respuesta de Lior Kogan.

// This looks cleaner, less error prone and easier to read than the other suggested by Lior Kogan #define UINT32_MAX ((uint32_t)-1)