mágico thanos
¿Cuál es la diferencia entre los 2? __INT_MAX__
se define sin agregar una biblioteca hasta donde yo sé y INT_MAX
se define en limits.h
pero cuando incluyo la biblioteca INT_MAX
se expande a __INT_MAX__
de cualquier manera (o eso dice VSCode). ¿Por qué alguna vez usaría el limits.h
uno cuando se expande al otro?
Andreas Wenzel
Siempre debes usar INT_MAX
ya que esa es la macro constante definida por el estándar ISO C.
La macroconstante __INT_MAX__
no está especificado por ISO C, por lo que no debe usarse, si desea que su código sea portátil. Esa macro es simplemente un detalle de implementación del compilador que está utilizando. Otros compiladores probablemente no definirán esa macro e implementarán INT_MAX
de alguna otra manera.
arbusto
__INT_MAX__
es una macro definida por la implementación, lo que significa que no todos los sistemas pueden tenerla. En particular, GCC define esta macro pero MSVC no.
Por otro lado, INT_MAX
está definido por el estándar C y se garantiza que estará presente en limits.h
para cualquier compilador conforme.
Entonces, para la portabilidad, use INT_MAX
.
-
Clang también define INT_MAXcomo parte de su funcionalidad “Funciona mucho como GCC”,
– John Dalman
17 dic a las 18:01
-
Creo que es más “funciona como un compilador ac” -)
– gnasher729
18 de diciembre a las 1:16
-
@gnasher729: Creo que John Dallman escribió INT_MAX (con guiones bajos al principio y al final) pero quería decir
__INT_MAX__
(con comillas invertidas adjuntas) en su lugar.– Édgar Bonet
18 dic a las 13:12
-
prueba_con_guiones bajos iniciales y finales
– Óscar Skog
18 dic a las 16:32
-
Una pudo también use barras invertidas:
\_\_INT_MAX\_\_
⇒ __INT_MAX__, o incluso_\_INT_MAX_\_
⇒ __INT_MAX__. Pero sí, ya que estamos hablando de código, deberíamos usar formato de código.– Scott – Слава Україні
18 dic a las 20:14
¿Por qué alguna vez usaría los límites. h uno cuando se expande al otro?
limits.h
es estándar y portátil.
Cada implementación del lenguaje C es libre de crear el valor de macros como INT_MAX
como crea conveniente. Él __INT_MAX__
el valor que está viendo es un artefacto de su compilador particular, y tal vez incluso la versión particular del compilador que está usando.
Juan Dallman
Para agregar a las otras respuestas, cuando está escribiendo código que se ejecutará en varias plataformas, De Verdad vale la pena apegarse a las normas. Si no lo hace, cuando aparece una nueva plataforma, tiene mucho trabajo que hacer para adaptarla, y la mejor manera de hacerlo suele ser cambiarla para que se ajuste al estándar. Este trabajo es muy aburrido y poco interesante, y bien vale la pena evitarlo haciendo las cosas bien desde el principio.
Trabajo en un modelador matemático que se escribió originalmente en la década de 1980 en VAX/VMSy en sus inicios admitía varias plataformas 68000, incluidas Apolo/Dominio. Hoy en día, se ejecuta en Windows, Linux, macOS, Android e iOS de 64 bits, ninguno de los cuales existió cuando fue creado.
lee joe
__INT_MAX__
es una macro predefinida en el preprocesador C que especifica el valor máximo de un tipo int en una plataforma particular. Este valor está definido por la implementación y puede variar entre diferentes plataformas.
INT_MAX
es una constante definida en el archivo de encabezado limits.h que especifica el valor máximo de un tipo int. Se define de la siguiente manera:
define INT_MAX __INT_MAX__
El archivo de encabezado limits.h es parte de la biblioteca estándar de C y proporciona varias constantes que especifican los límites de varios tipos, como los valores mínimo y máximo de los tipos int, long y long long.
La razón por la cual INT_MAX
Se define como __INT_MAX__
es porque __INT_MAX__
es una macro predefinida que especifica el valor máximo de un tipo int en una plataforma particular, e INT_MAX es simplemente un alias para este valor.
Puedes usar cualquiera __INT_MAX__
o INT_MAX
para obtener el valor máximo de un tipo int, pero generalmente se recomienda usar INT_MAX
ya que se define en un archivo de encabezado de biblioteca estándar y, por lo tanto, es más portátil.
-
__INT_MAX__
no está definida por la implementación. Ese término, en el contexto de C, significa el estándar C requiere una implementación para especificar cuál es la definición. El estándar C no hace tal requisito para__INT_MAX__
. Una implementación puede definir__INT_MAX__
pero el término “definido por la implementación” no debe usarse para describir eso.–Eric Postpischil
18 dic a las 16:20
-
__INT_MAX__
es un nombre reservado para uso interno de la implementación; tenga en cuenta los dos guiones bajos seguidos de una letra mayúscula. Lo que está describiendo es solo la elección de implementación de GCC/glibc. (Donde ponen la constante numérica real en el compilador, en lugar de necesitar diferentes versiones delimits.h
para objetivos con 16 bitsint
o 32 frente a 64 bitslong
.)– Peter Cordes
19 dic a las 19:48
-
@EricPostpischil ¿cuál es el término correcto para este concepto? Habría usado “definición de implementación” para referirme a cualquier característica que admita y documente una implementación en particular, no necesariamente algo requerido por el estándar.
– PC Ludita
hace 2 días
-
@PCLuddite: En su mayoría, simplemente evitaría la frase específica “definido por implementación”, ya que el estándar C lo usa para significar cosas que se requiere que defina una implementación. Podría decir “GCC define
__INT_MAX__
ser el valor máximo de unint
” o “Algunas implementaciones de C definen__INT_MAX__
,” etcétera. No estoy seguro de que GCC realmente documente__INT_MAX__
para uso ordinario del programador. Puede ser algo que defina para que los implementadores de la biblioteca estándar C usen en los encabezados, para que puedan escribir#define INT_MAX __INT_MAX__
hacer una cabecera que se adapte a diferentes target…–Eric Postpischil
hace 2 días
-
… En general, podría decir que una implementación define algo como una extensión, o que especifica ciertas cosas, u otra frase adecuada para el problema en particular. Simplemente evite “definido por implementación”.
–Eric Postpischil
hace 2 días
Satish Chandra Gupta
En el lenguaje de programación C, INT_MAX
es una macro que se expande al valor máximo que se puede almacenar en una variable de tipo int. Este valor está definido por la implementación, lo que significa que puede variar según la implementación de C específica que se utilice. En la mayoría de los sistemas, int es un tipo de datos de 32 bits y INT_MAX
se define como 2147483647, que es el valor máximo que se puede almacenar en un entero complemento a dos de 32 bits.
Por otro lado, __INT_MAX__
es una macro predefinida que representa el valor máximo que se puede almacenar en una variable de tipo int en el sistema donde se compila el programa C. Me gusta INT_MAX
El valor de __INT_MAX__
está definido por la implementación y puede variar según la implementación de C específica que se utilice. Sin embargo, __INT_MAX__
es establecido por el compilador durante la compilación, mientras que INT_MAX
normalmente se define en un archivo de encabezado (por ejemplo, limites.h) e incluidos en el programa en tiempo de ejecución.
En general, se recomienda utilizar INT_MAX
en vez de __INT_MAX__
en programas C, como INT_MAX
es portátil y funcionará en cualquier sistema, mientras que __INT_MAX__
es específico del sistema en el que se está compilando el programa.
-
__INT_MAX__
no está definida por la implementación. Ese término, en el contexto de C, significa el estándar C requiere una implementación para especificar cuál es la definición. El estándar C no hace tal requisito para__INT_MAX__
. Una implementación puede definir__INT_MAX__
pero el término “definido por la implementación” no debe usarse para describir eso.–Eric Postpischil
18 dic a las 16:20
-
__INT_MAX__
es un nombre reservado para uso interno de la implementación; tenga en cuenta los dos guiones bajos seguidos de una letra mayúscula. Lo que está describiendo es solo la elección de implementación de GCC/glibc. (Donde ponen la constante numérica real en el compilador, en lugar de necesitar diferentes versiones delimits.h
para objetivos con 16 bitsint
o 32 frente a 64 bitslong
.)– Peter Cordes
19 dic a las 19:48
-
@EricPostpischil ¿cuál es el término correcto para este concepto? Habría usado “definición de implementación” para referirme a cualquier característica que admita y documente una implementación en particular, no necesariamente algo requerido por el estándar.
– PC Ludita
hace 2 días
-
@PCLuddite: En su mayoría, simplemente evitaría la frase específica “definido por implementación”, ya que el estándar C lo usa para significar cosas que se requiere que defina una implementación. Podría decir “GCC define
__INT_MAX__
ser el valor máximo de unint
” o “Algunas implementaciones de C definen__INT_MAX__
,” etcétera. No estoy seguro de que GCC realmente documente__INT_MAX__
para uso ordinario del programador. Puede ser algo que defina para que los implementadores de la biblioteca estándar C usen en los encabezados, para que puedan escribir#define INT_MAX __INT_MAX__
hacer una cabecera que se adapte a diferentes target…–Eric Postpischil
hace 2 días
-
… En general, podría decir que una implementación define algo como una extensión, o que especifica ciertas cosas, u otra frase adecuada para el problema en particular. Simplemente evite “definido por implementación”.
–Eric Postpischil
hace 2 días
Abhiranjan tiwari
INT_MAX es una macro que especifica que una variable entera no puede almacenar ningún valor más allá de este límite.
INT_MIN especifica que una variable entera no puede almacenar ningún valor por debajo de este límite.
Los valores de INT_MAX e INT_MIN pueden variar de un compilador a otro. Los siguientes son valores típicos en un compilador donde los enteros se almacenan usando 32 bits.
El valor de INT_MAX es +2147483647. El valor de INT_MIN es -2147483648.
Hay buena información sobre guiones bajos iniciales en esta pregunta SO.
– AdrianHHH
17 de diciembre a las 12:16
Aplique etiquetas específicas (por ejemplo, qué idioma) a su pregunta.
– MoMo
hace 4 horas