Wie gehe ich eine Aufzählung konsequent durch? - Seite 6

 
pavlick_:

Ein Hinweis für Programmierer:


Wenn wir nun eine Aufzählung bearbeiten müssen, tun wir dies einmal und an einer Stelle. Wir müssen ein neues Element hinzufügen, zum Beispiel element_new = 56, wir fügen hinzu

Und wir machen uns nicht die Mühe, die Funktion get_enumqq_array() zu bearbeiten. Die Technik heißt X-Makro https://en.wikipedia.org/wiki/X_Macro. Wenn Entwickler dies wünschen, können sie Standardaufzählungen auf ähnliche Weise ändern.

Die Aufzählung ist vielleicht nicht auf den ersten Blick ersichtlich, aber sie hat sich folgendermaßen entwickelt:

Super! Ich wusste nichts von dem X-Makro, vielen Dank! Ich verstehe nur den Code nicht, warum es keinen Fehler wegen des Kommas am Ende der Definition ENUM_QQ_HELPER gibt. Bei der Definition von enum oder array sollte nach dem letzten Element kein Komma stehen. Aber der Compiler scheint aus irgendeinem Grund nicht darauf zu fluchen.

Ich habe versucht

int a[] = {1, 2,};

wird es nicht. Und die Array-Größe (enum) ist so, wie sie sein sollte. Das ist cool! Es scheint ein Fehler zu sein, aber ich würde lieber einen solchen Fehler haben. Wirklich, das ist praktisch.

 
warum es keinen Fehler durch ein Komma gibt

Nun, es ist ein legitimer Verstoß, insbesondere bei dieser Art von "Zeug". Machen Sie sich keine Sorgen, auch in C/C++ ist das kein Fehler.

SZZ: im C++-Standard zum Thema Initialisierung:

braced-init-list:

   {initializer-list , opt}

   { }

D.h. das Komma am Ende von braced-init-list ist auf höchster Ebene legalisiert.

 
pavlick_:

Das heißt, das Komma am Ende der Klammer-Init-Liste ist auf höchster Ebene legalisiert.

Danke, ich werde es wissen und anwenden.
 
pavlick_:

Ein Hinweis für Programmierer:

Was ist mit den normalen Namen, die in den Kommentaren stehen?

 
Комбинатор:

Was ist mit den normalen Namen, die in den Kommentaren stehen?

Kann ich ein Beispiel für die betreffende Aufzählung haben?
 
Комбинатор:

Was ist mit den normalen Namen, die in den Kommentaren stehen?

Ja, das Einfügen eines Kommentars funktioniert nicht. Unglückliche Syntax für die Kommentierung von Enums.

Kann ich ein Beispiel für die betreffende Aufzählung haben?

enum E
{
   a = 1         // вот этот комментарий
}
 
pavlick_:

Ja, es funktioniert nicht, einen Kommentar einzufügen. Unglückliche Syntax für die Kommentierung von Aufzählungen.

Schließen Sie ihn mit /*...*/ ab.
 
fxsaber:
Schließen Sie ihn mit /*...*/ ab.
Der Unsinn hier ist, dass der Präprozessor Kommentare (sowohl // als auch /*) nicht fressen will und nicht erwartet, sie beim Erweitern von Makros zu sehen. Ändern Sie entweder die Regeln für den Präprozessor, oder führen Sie eine alternative Möglichkeit ein, Aufzählungen zu kommentieren (der Kommentar wird angezeigt, wenn das Skript in den Einstellungen ausgeführt wird), z. B. diese:

enum E {
   a = 1,            --**--  Комментарий_1
   b = 2            --**--  Комментарий_2
};
Ich bin hier bereits machtlos.
 
pavlick_:
Das Problem hier ist, dass der Präprozessor Kommentare (sowohl // als auch /*) nicht fressen will, er erwartet nicht, sie zu sehen, wenn Makros erweitert werden. Ändern Sie entweder die Regeln für den Präprozessor, oder führen Sie eine alternative Möglichkeit ein, Aufzählungen zu kommentieren (der Kommentar wird angezeigt, wenn das Skript in den Einstellungen ausgeführt wird), etwa so:

enum E {
   a = 1,            --**--  Комментарий_1
   b = 2            --**--  Комментарий_2
};
Ich bin hier bereits machtlos.
 

Die Vorverarbeitung erfolgt in mehreren Schritten. Zunächst werden alle Kommentare aus dem Quellcode entfernt, und das Ergebnis wird zur Verarbeitung gesendet. Und das ist der Punkt, an dem der Präprozessor keinen Kommentar erwartet (wenn er die Makros öffnet). Sie wird eine solche Begegnung als Fehler betrachten. Zum Beispiel hier:

#define  COMMENT / ## /

void OnStart()
{
  COMMENT
}
Auf den ersten Blick sollte dieser harmlose Code einen Kommentar enthalten. Aber es lässt sich nicht kompilieren.
Grund der Beschwerde: