Condiciones de Yoda y promoción de enteros

1 minuto de lectura

Condiciones de Yoda y promocion de enteros
carpintero mate

Al comparar un tipo más grande que intcon una constante entera, ¿debo colocar la constante a la izquierda o a la derecha para garantizar que se realice la comparación correcta?

int64_t i = some_val;
if (i == -1)

o debería ser:

if (-1 == i)

¿Hay alguna circunstancia en la que cualquiera de los casos no sea idéntico a la comparación con -1LL (donde int64_t es long long)?

  • una gran etiqueta Yoda fue 🙂

    – Josh Petit

    24/09/2012 a las 19:32


Condiciones de Yoda y promocion de enteros
coste y flete

No importa si lo pones del lado derecho o del lado izquierdo; los == El operador es completamente simétrico.

Si ambos operandos al == operador tiene tipo aritmético, como en este caso, entonces se aplican las “conversiones aritméticas usuales” (C99 §6.5.9). En este caso, la regla que se aplica es:

Si ambos operandos tienen tipos de enteros con signo o ambos tienen tipos de enteros sin signo, el operando con el tipo de menor rango de conversión de enteros se convierte al tipo de operando con mayor rango. (C99 §6.3.1.8)

Entonces el -1 se convierte en int64_t. -1LL No hace diferencia.

  • Fantástico, exactamente lo que quería saber.

    – Matt Carpintero

    21 de septiembre de 2010 a las 13:49

  • Además de la respuesta: la razón habitual para poner la constante primero es para ayudar a detectar errores tipográficos: si escribió mal == como =, entonces el compilador se quejará de que no puede asignar a una constante. Al revés (constante en el lado derecho), no se garantiza una queja del compilador.

    –Bart van Ingen Schenau

    21 de septiembre de 2010 a las 15:14

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad