2010-02-27 16 views
5

Acabo de empezar C hace muy poco y me ha pedido para responder a algunos ejercicios de codificación en el que el siguiente fragmento de código aparece:Fácil C pregunta enumeración

typedef enum { 
    false = 0, 
    true = 1 
} Bool; 

Podría alguien proporcionar una explicación breve y clara a ¿ese?

Muchas gracias.

+0

¿Necesita la etiqueta de deberes? –

+1

Cada vez que se hace una pregunta como esta y uno empieza a responder, sabe que antes de publicar su respuesta habrá al menos otras 5 personas que ya publicaron la suya propia, con la esperanza de obtener cientos de puntos. : P –

+1

Por lo tanto, hay infinitos usuarios respondiendo esta pregunta. (e infinito de ellos eliminaron el suyo después de realizar la duplicación, así que solo ves 6 aquí): p – kennytm

Respuesta

11

Realmente hace dos cosas; puedes dividirla en algo como esto:

enum _bool { 
    false = 0, 
    true = 1 
}; 

Y:

typedef enum _bool Bool; 

Este código crea un nuevo tipo de enumeración y luego utiliza typedef a darle un nombre conveniente. Le permitiría usar un nuevo 'tipo' llamado Bool en otro lugar en su código, y asignarle los valores false y true. Aquí hay un caso de uso simple:

Bool logical_not(Bool in) 
{ 
    if (in == true) 
     return false; 
    else 
     return true; 
} 
+0

Claramente, el código enviado no hace eso, porque _bool no existe en el original. Llegué aquí porque estaba tratando de encontrar documentación sobre "enum sin nombre", lo cual no tiene sentido en lo que a mí respecta Explicar esto debe ser parte de la respuesta. –

+0

Las enumeraciones no necesitan una etiqueta o un tipodef; 'enum {A, B, C}' es un código válido. ¿Qué estás tratando de preguntar? –

1

Dado que C no tiene un tipo de datos booleanos, su código simula uno haciendo uso de typedef.

Usted puede hacer uso del nuevo tipo de datos de usuario se define de la siguiente manera:

Bool find_key_in_array() { 
     Bool found = false; // assume not found. 

     // do searching and set found suitably.  

     return found; 
} 

int main() { 

     Bool result = find_key_in_array(); 

     return 0; 
} 
1

Proporciona literales legibles para el verdadero y falso. Pero podrías adivinar eso.

¿Cómo funciona? Una enumeración (palabra clave enum) conecta una serie de tokens con valores enteros, y typedef ... Bool; hace Bool el nombre de tipo de la enumeración.

En conjunto me desalentaría este idioma, ya que más tarde podría estar tentado a usar

int flag=false; 
// something happens that might change the setting of flag that *doesn't* use the enum 
if (flag == true) { 
    //... 
} 

y si flag segregaba a 2 esto no va a hacer lo que usted espera.

Si utiliza c por mucho tiempo, el cero es falso, todo lo demás es verdadero, la interpretación será en sí misma una segunda naturaleza.

1

A enum es un tipo integral que tiene un número limitado de valores simbólicos. Esto le permite hacer cosas como:

Bool finish = false; 

while (finish != true) 
{ 
    ... 
} 
0

Por lo que recuerdo:

Esto declara una enumeración y luego se asocia un nombre, Bool, a esta enumeración (a través de typedef). Puede obtener más información sobre las enumeraciones C here

4

Es solo una definición de una enumeración, un tipo que puede asumir solo un número discreto de valores, es decir, los que figuran entre corchetes. A cada uno de estos valores se le asigna un nombre, que luego puede usar para referirse a él. Si solo especifica el nombre de los valores y no el valor real, el compilador los configurará en orden creciente, comenzando desde cero para el primer elemento.

Consulte el wiki article sobre los tipos enumerados (y en particular su C section) para obtener más información.

Esa enumeración específica define un tipo booleano, es decir, un tipo que puede asumir solo dos valores: verdadero y falso, donde falso =! Verdadero. Los valores booleanos se usan con mucha frecuencia en la programación, por ejemplo, como indicadores para indicar si se cumple una condición, y en realidad muchos idiomas los incluyen como un tipo nativo (C++ y C99, por ejemplo, hacer eso).

Por cierto, para definir que la enumeración siguiente:

enum Bool 
{ 
    false = 0, 
    true = 1 
}; 

sería suficiente; Sin embargo, debido a la forma C se diseñó para declarar una variable del tipo Bool con este código que se necesita para poner siempre la palabra clave enumeración antes Bool:

enum Bool myFlag=true; 

Usando el truco typedef, en cambio, se define una enum anónimo hecho de esa manera, y luego le proporciona un alias llamado Bool; de esa manera usted puede simplemente hacer:

Bool myFlag=true;