Estoy muy feliz de que, en C, este tipo de cosas son malas código:Cómo evitar cuidadosamente C echa a perder la verdad
(var_a == var_b) ? TRUE : FALSE
Sin embargo, ¿cuál es la mejor manera de tratar con esto:
/* Header stuff */
#define INTERESTING_FLAG 0x80000000
typedef short int BOOL;
void func(BOOL);
/* Code */
int main(int argc, char *argv[])
{
unsigned long int flags = 0x00000000;
... /* Various bits of flag processing */
func(flags & INTERESTING_FLAG); /* func never receives a non-zero value
* as the top bits are cut off when the
* argument is cast down to a short
* int
*/
}
¿Es aceptable (para cualquier valor de aceptable que esté utilizando) tener (flags & FLAG_CONST) ? TRUE : FALSE
?
Creo que el problema aquí es '#define BOOL corta int'. Ha definido un tipo llamado booleano, pero donde los valores distintos de cero se convierten en falso. Entonces ha actuado como si cualquier valor distinto de cero es verdadero. Esa es una abstracción con goteras. –
Realmente no veo qué hay de malo en ese código, es una función de lenguaje estándar que cualquier programador de C debe saber. – Skizz
@Skizz: el problema con '(var1 == var2)? VERDADERO: FALSO; ¿quieres decir? El problema es que se expresa mejor como '(var1 == var2)', suponiendo que TRUE y FALSE tienen valores razonables. –