2012-01-04 19 views
40

¿Alguien me puede explicar cuál es la diferencia entre el tipo de datos _Bool y bool en C? Por ejemploDiferencia entre los tipos _Bool y bool en C?

_Bool x = 1; 
    bool y = true; 

    printf("%d", x); 
    printf("%d", y); 
+1

'bool' debe ser también un typedef, C no tiene ese tipo. –

+0

Análoga a _Complex vs complex. –

Respuesta

87

se añadieron Estos tipos de datos en C99. Como bool no se reservó antes de C99, usan la palabra clave _Bool (que se reservó).

bool es un alias para _Bool si incluye stdbool.h. Básicamente, incluir el encabezado stdbool.h es una indicación de que su código está bien con el identificador bool siendo 'reservado', es decir, que su código no lo usará para sus propios fines (de manera similar para los identificadores true y false).

+4

+1 para incluir el historial. – Lindydancer

+18

La intención a largo plazo parece ser que el estándar será eventualmente revisado para hacer que bool sea una palabra clave. Este es el paso 1, donde puede usar para obtener la macro bool y todavía se le permite definirla o redefinirla para sus nefastos propósitos. El paso 2 será negarse a definir o redefinir bool del para desalentar tales engaños. Luego, el paso 3 es hacer que bool sea una palabra clave exactamente como _Bool y marcar _Bool en desuso. Al final de este largo camino (digamos, una década o dos a partir de ahora) el código C estándar tendrá un tipo bool, y los nuevos programadores no sabrán que nunca lo tuvo. – tialaramex

+2

No entiendo por qué esto tiene que durar dos décadas dado que es una mejora bastante obvia. El código que no le gusta este cambio aún se puede compilar utilizando las versiones actuales del compilador. –

13

No hay diferencia.

bool es una macro que se expande a _Bool en stdbool.h.

Y true es una macro que se expande a 1 en stdbool.h

Cuestiones relacionadas