2010-02-27 3 views
5

Je viens de commencer C très récemment et on m'a demandé de répondre à quelques exercices de codage dans lequel le morceau de code suivant apparaît:facile C ENUM question

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

Quelqu'un pourrait-il s'il vous plaît fournir une explication brève et claire cette?

Merci beaucoup.

+0

Vous avez des devoirs? –

+1

Chaque fois qu'une question comme celui-ci est posée et un début à répondre, il sait que avant qu'il ait posté sa réponse, il y aura au moins 5 autres personnes qui ont déjà publié leur annonce propre, dans l'espoir comme lui pour cent faciles points. : P –

+1

Par conséquent, il existe des utilisateurs infinis répondant à cette question. (Et infini d'entre eux leur propre supprimé après avoir réalisé la duplication ici si vous ne voyez que 6): p – kennytm

Répondre

11

Ça fait vraiment deux choses; vous pouvez décomposer quelque chose comme ceci:

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

Et:

typedef enum _bool Bool; 

Ce code crée un nouveau type d'énumération et utilise ensuite typedef pour lui donner un nom pratique. Il vous permettra d'utiliser un nouveau type appelé Bool ailleurs dans votre code, et lui assigner les valeurs false et true. Voici un cas d'utilisation simple:

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

Il est clair que le code soumis ne le fait pas, parce _Bool n'existe pas dans l'original. Je suis ici parce que je tentais de trouver de la documentation sur « ENUM sans nom », qui est un non-sens en ce qui me concerne . Expliquer cela doit faire partie de la réponse –

+0

énumérations ne ont pas besoin d'une étiquette ou un typedef;.. 'ENUM {a, B, C}' est un code valide Que voulez-vous demander? –

1

Comme C n'a pas de type de données booléen, votre code en simule un en utilisant typedef.

Vous pouvez utiliser le nouveau type de données défini par l'utilisateur comme suit:

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

Il fournit des littéraux lisibles pour vrai et faux. Mais tu pourrais deviner ça.

Comment ça marche? Une énumération (mot-clé enum) connecte une série de jetons avec des valeurs entières et le typedef ... Bool; fait Bool le nom de type de l'énumération.

Dans l'ensemble, je découragerait cet idiome parce que vous pourriez plus tard être tenté d'utiliser

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

et si flag mais j'ai mis à 2 cela ne va pas ce que vous attendez.

Si vous utilisez c pendant longtemps le zéro est faux tout le reste est vrai interprétation sera beome seconde nature.

1

Une énumération est un type intégral qui a un nombre limité de valeurs symboliques. Cela vous permet de faire des choses comme:

Bool finish = false; 

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

D'après ce que je me souviens:

Cette énumération et déclare un associe alors un nom, Bool, à cette énumération (par typedef). Vous pouvez obtenir plus d'informations sur les énumérations C here

4

Il s'agit simplement d'une définition d'une énumération, un type qui peut n'assumer qu'un nombre discret de valeurs, c'est-à-dire celles comprises entre ces crochets. Chacune de ces valeurs reçoit un nom que vous pouvez utiliser plus tard pour vous y référer. Si vous spécifiez uniquement le nom des valeurs et non la valeur réelle, le compilateur les définira pour vous dans l'ordre croissant, à partir de zéro pour le premier élément.

Voir le wiki article sur les types énumérés (et en particulier son C section) pour plus d'informations.

qu'ENUM spécifique définit un type booléen, à savoir un type qui ne peut prendre que deux valeurs: vrai et faux, où faux = true!. Les valeurs booléennes sont utilisées très souvent dans la programmation, par exemple sous forme de drapeaux pour indiquer si une condition est remplie, et les inclure en fait de nombreuses langues comme un type natif (C++ et C99, par exemple, faire).

Par ailleurs, de définir qu'ENUM ceci:

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

serait suffisant; Toutefois, en raison de la façon dont C a été conçu pour déclarer une variable du type Bool avec ce code, vous devez toujours mettre le mot-clé ENUM avant Bool:

enum Bool myFlag=true; 

en utilisant l'astuce typedef, au lieu, vous définissez une enum anonyme réalisé de cette façon, et ensuite vous lui fournissez un alias nommé Bool; de cette façon, vous pouvez simplement faire:

Bool myFlag=true;