2010-10-04 4 views

Antwort

13

In C99 sollten Sie stdbool.h verwenden, das bool, true und false definiert.

Sonst was Sie haben, ist in Ordnung. Verwenden Sie einfach die Enumeration ein wenig einfacher, aber wenn Sie wirklich Platz sparen möchten, was Sie arbeiten.

+2

Wahrscheinlich seine Plattform 'hat sizeof (any_enum_t) == sizeof (int)'. – Potatoswatter

+0

@Potato: Ah, richtig. Ich denke nur nicht, dass es sich wirklich lohnt. Nicht wirklich ein Verlust, also meh. (Wenn ich mich nicht irre, muss diese bestimmte enum übrigens den darunter liegenden Typ "int" haben.) – GManNickG

+0

Mein C ist rostig, aber ich denke, die 'int'-Anforderung ist ein C++ 03-ism. Da der ABI x86-64 auch dasselbe sagt, wird es wahrscheinlich keinen großen Unterschied geben. – Potatoswatter

1

Ich denke, es ist in Ordnung, schön und sauber.

3

Der Nachteil von typedef char bool; ist, dass, wenn Sie mit einer C99-Implementierung kompilieren und zufällig <stdbool.h> enthalten, endet dies als typedef char _Bool;, was falsch ist. Auch wenn Sie jemals versucht haben, den Code als C++ zu kompilieren, hätten Sie Probleme (das ist nicht unbedingt ein Problem, aber es könnte sein).

Es wäre wahrscheinlich besser, entweder <stdbool.h> zu verwenden, wenn Ihre Implementierung eine bietet oder einen anderen Namen für den Typ zu verwenden, wie BOOL.

5

Die kurze Antwort ist: es ist in Ordnung. Es ist besonders gut, wenn Sie große Arrays von ihnen machen müssen, obwohl ich versucht wäre, nur die eingebaute C99 zu verwenden.

Da Sie gefragt "gibt es irgendwelche Nachteil ..." Ich nehme an, ich könnte bemerken, dass es wichtige Maschinen gab, die nicht wirklich eine Zeichenladeanweisung hatten. (Der Cray und das ursprüngliche DEC Alpha kommen mir in den Sinn.) Maschinen in der Zukunft könnten plötzlich wieder ganz minimal werden.

Es wird immer schnell sein, um einen Standard-Integraltyp zu laden.

Es wird wahrscheinlich immer schnell sein, um ein einzelnes Zeichen zu laden.


1. Siehe C99 6.2.5. Es gibt einen eingebauten Typ _Bool. Dann, wenn Sie <stdbool.h> (siehe C99 7.16) einschließen, erhalten Sie einen Alias, den eleganteren Namen bool, und definiert für true und false. Wenn Sie dies verwenden, wird es mit Ihrem Typdef kollidieren, aber ich bin sicher, es wäre eine einfache Sache zu beheben.

0

Ich würde vorschlagen, ein Bit zu verwenden, um wahr oder falsch darzustellen, anstatt ein Zeichen. Ein Zeichen verwendet 8 Bits. Wir können 1 für wahr und 0 für falsch mit nur 1 Bit setzen. Das wird mehr Speicher effizient sein und erfüllt auch den Zweck. (z. B.) Zeichenflag: 1;

Referenz: http://en.wikipedia.org/wiki/Bit_field

+1

Speichereffizienz bedeutet nicht unbedingt besser. Der Zugriff auf Bits ist wahrscheinlich ziemlich langsam und unnötig komplex. – GManNickG

+0

Mit Bool Datatype ist besser, stimme ich zu. Es ist auch 1 Bit. Aber kannst du bitte erklären, warum es langsam ist. Ich bin ein Neuling !! – sethu

+0

@GMan: Wenn Sie eine große Anzahl von Booleschen Werte indiziert durch ganzzahlige Positionen benötigen, ein Bit-Array ist definitiv der Weg zu gehen. Wenn es nur ein einzelner Wert ist, ist die Verwendung von 'int' oder C99' bool' völlig in Ordnung. Ich sehe keinen Grund, 'char' zu verwenden. –