2010-02-27 8 views
5

Ich habe gerade C vor kurzem begonnen und ich bin gebeten worden, erscheint das folgende Stück Code einige Codierung Übungen, in denen zu beantworten:Leicht C Enum Frage

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

Könnte jemand bitte eine kurze und klare Erklärung liefern zu Das?

Vielen Dank.

+0

Needs Hausaufgaben-Tag? –

+1

Jedes Mal, wenn eine Frage wie diese gestellt wird und man anfängt zu antworten, weiß er, dass bevor er seine Antwort geschrieben hat, mindestens 5 weitere Personen bereits ihre eigenen gepostet haben, in der Hoffnung wie er für einfache hundert Punkte. : P –

+1

Daher gibt es unendlich viele Benutzer, die diese Frage beantworten. (und unendlich viele von ihnen löschten ihre eigenen, nachdem sie die Duplizierung erkannt hatten, so dass Sie nur 6 hier sehen): p – kennytm

Antwort

11

Es macht wirklich zwei Dinge; Sie können es brechen so etwas wie dies unten:

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

Und:

typedef enum _bool Bool; 

Dieser Code erstellt einen neuen Typ Aufzählung und verwendet dann typedef es einen passenden Namen zu geben. Damit können Sie einen anderen "Typ" namens Bool an anderer Stelle in Ihrem Code verwenden und ihm die Werte false und true zuweisen. Hier ist ein einfacher Anwendungsfall:

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

Offensichtlich tut der eingereichte Code das nicht, weil _bool im Original nicht existiert. Ich kam hierher, weil ich versuchte, etwas Dokumentation über "unbenannte enum" zu finden, was für mich Unsinn ist Erklären das muss Teil der Antwort sein –

+0

Aufzählungen benötigen keine Bezeichnung oder ein typedef; 'enum {A, B, C}' ist gültiger Code. Was versuchst du zu fragen? –

1

Da C keinen booleschen Datentyp hat, simuliert Ihr Code einen, indem Sie typedef verwenden.

Sie können den neuen benutzerdefinierten Datentyp machen, wie folgt:

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

Es bietet lesbar Literale für wahr und falsch. Aber das könntest du erraten.

Wie funktioniert es? Eine Enumeration (Schlüsselwort enum) verbindet eine Reihe von Token mit ganzzahligen Werten, und typedef ... Bool; macht Bool den Typnamen der Enumeration.

Im Großen und Ganzen würde ich dieses Idiom entmutigen, weil Sie später versucht sein könnten,

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

zu verwenden und wenn flag auf 2 gesetzt wurde wird dies nicht tun, was Sie erwarten.

Wenn Sie c für lange verwenden, ist die Null falsch, alles andere ist wahr, Interpretation wird zweite Natur sein.

1

Ein Enum ist ein integraler Typ, der eine begrenzte Anzahl von symbolischen Werten hat. Auf diese Weise können Sie tun Dinge wie:

Bool finish = false; 

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

Von dem, was ich erinnere mich:

Dies erklärt eine Aufzählung und ordnet dann einen Namen, Bool, auf diese Aufzählung (durch typedef). Sie können weitere Informationen über C Aufzählungen erhalten here

4

Es ist nur eine Definition eines Enum, ein Typ, der nur eine diskrete Anzahl von Werten annehmen kann, das heißt, die in solchen Klammern diejenigen. Jeder dieser Werte erhält einen Namen, den Sie später verwenden können, um darauf Bezug zu nehmen. Wenn Sie nur den Namen der Werte und nicht den tatsächlichen Wert angeben, setzt der Compiler sie für Sie in aufsteigender Reihenfolge, beginnend mit Null für das erste Element.

Weitere Informationen finden Sie in der wiki article über aufgezählte Typen (und insbesondere seine C section).

Diese spezifische Aufzählung definiert einen booleschen Typ, d. H. Einen Typ, der nur zwei Werte annehmen kann: wahr und falsch, wobei falsch =! Wahr ist. Die booleschen Werte werden sehr oft in der Programmierung verwendet, zum Beispiel als Flags, um anzuzeigen, ob eine Bedingung erfüllt ist, und tatsächlich enthalten viele Sprachen sie als nativen Typ (C++ und C99, zum Beispiel, tue das).

By the way, dass Enum diese zu definieren:

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

wäre genug; Da jedoch, wie C eine Variable vom Typ Bool zu erklären, mit diesem Code wurde entwickelt, müssen Sie immer das Enum Schlüsselwort vor Bool setzen:

enum Bool myFlag=true; 

den typedef Trick Sie stattdessen eine definieren anonymous enum auf diese Weise gemacht, und dann geben Sie einen Alias ​​namens Bool; auf diese Weise können Sie einfach tun:

Bool myFlag=true;