Aber wenn ich eine andere Frucht hinzufügen möchte, muss ich einen anderen Wert zuweisen, und wenn ich eine dazwischen setze, muss ich das meiste neu nummerieren. Gibt es eine einfachere Möglichkeit, dies zu tun?
Sie sollten bereichsbezogene C++11-Aufzählungen verwenden. Es gibt kein C/C++.
– Leichtigkeitsrennen im Orbit
9. Januar 2014 um 17:57 Uhr
@LightnessRacesinOrbit: Es sei denn, die Absicht besteht darin, eine Definition zu schreiben, die in beiden Sprachen verwendbar ist; in diesem Fall ist es durchaus sinnvoll, es “C/C++” zu nennen.
Pro “5.2.4.2.1 Größen von Integer-Typen ” und/oder “Anlage E/1” des C11-Standards INT_MIN ist mindestens -32767.
INT_MIN wird durch Einschließen definiert <limits.h>.
Shafik Yaghmur
Im C Sie müssen nur den obersten Eintrag nummerieren, und nachfolgende Einträge sind der vorherige Eintrag +1dies ist in der abgedeckt C99-Standardentwurf Sektion 6.7.2.2Aufzählungsbezeichner was sagt (Betonung von mir):
[…]Ein Enumerator mit = definiert seine Enumerationskonstante als Wert des konstanten Ausdrucks. Wenn der erste Enumerator kein = hat, ist der Wert seiner Enumerationskonstante 0. Jeder nachfolgende Enumerator mit no = definiert seine Enumerationskonstante als den Wert des konstanten Ausdrucks, der durch Addition von 1 erhalten wird auf den Wert der vorherigen Enumerationskonstante.[…]
und der Wortlaut ist ähnlich in der C++-Standardentwurf Sektion 7.2Aufzählungserklärungen Absatz 2.
Machen Sie also einfach etwas Ähnliches wie das Folgende:
Zunächst einmal gibt es kein “C/C++”, das sind zwei verschiedene Sprachen. Sie können C nicht als Teilmenge von C++ betrachten; Einige legale C-Codes lassen sich nicht als C++-Programm kompilieren.
Wenn Sie C++11 verwenden können, schlage ich vor, dass Sie verwenden enum classwas dir gibt stark typisierte Aufzählungen:
enum class Traffic {red , yellow, green};
Traffic t = Traffic::red;
if ( t == Traffic::red ) // to test the value of an enum
Auf diese Weise können Sie garantieren, dass es zu keinen Konflikten kommt, da der Compiler keinen Vergleich mit einer Ganzzahl oder mit einer Variablen eines anderen Aufzählungstyps zulässt.
Sie können nur mit einer Variablen des gleichen Aufzählungstyps vergleichen oder den Binärbereichsauflösungsoperator wie im Beispiel verwenden.
Ein weiterer Vorteil davon enum class ist, dass Sie die Größe Ihrer Aufzählung festlegen können. Sie können jeden vorzeichenbehafteten oder vorzeichenlosen ganzzahligen Typ wie diesen verwenden:
enum class Traffic : char { red, yellow, green }
Wenn kein Typ angegeben ist, ist der Standardwert int wird angenommen.
Beachten Sie, dass Sie dafür einen Compiler mit C++11-Unterstützung benötigen.
Tschad
Fügen Sie neue oben hinzu. Die oberste muss noch nummeriert werden.
enum fruit
{
orange = -4,
lemon,
banana,
apple,
};
Digitale_Realität
Ich denke, du kannst es bestellen, wie du willst.
Wenn Sie keinen Wert angeben, dann als nächstes enum werde nehmen +1 seines vorherigen Wertes. Wenn auch Faust enum keinen Wert hat, dann wird damit begonnen 0.
Aber gute Praxis ist, es in der richtigen Reihenfolge zu haben.
Es ist auch üblich, die Fehler als übliche Aufzählungen zu deklarieren und den negativen Wert davon zu verwenden, wie zum Beispiel:
Sie sollten bereichsbezogene C++11-Aufzählungen verwenden. Es gibt kein C/C++.
– Leichtigkeitsrennen im Orbit
9. Januar 2014 um 17:57 Uhr
@LightnessRacesinOrbit: Es sei denn, die Absicht besteht darin, eine Definition zu schreiben, die in beiden Sprachen verwendbar ist; in diesem Fall ist es durchaus sinnvoll, es “C/C++” zu nennen.
– Mike Seymour
9. Januar 2014 um 18:06 Uhr