Vorwärtsdeklaration von Aufzählungen, eine Funktion, die es uns ermöglicht, die vollständige Definition eines Aufzählungstyps auf zu verschieben später im Code ist in bestimmten Szenarien eine wünschenswerte Funktion. In C wurde diese Funktionalität jedoch bis zur Einführung von C 11 nicht unterstützt.
Grund für die Einschränkung:
In C 03 und früheren Versionen waren Aufzählungen implizit Die Größe richtet sich nach ihrem Inhalt. Das bedeutete, dass der Compiler den vollständigen Satz von Enum-Werten kennen musste, um den richtigen Speichertyp zu bestimmen. Da die Forward-Deklaration nur den Enum-Namen angibt, war es nicht möglich, die Größe des Enums abzuleiten, daher das Verbot.
C 11 Forward-Deklaration:
C 11 führte das Konzept ein, die Größe einer Aufzählung mithilfe der Aufzählung explizit anzugeben:
enum Enum2 : unsigned int; // Legal in C++11, size explicity specified
Darüber hinaus bietet das in C 11 eingeführte Schlüsselwort enum class auch eine Möglichkeit, Deklarationsaufzählungen weiterzuleiten, da es einen Standardwert zuweist Typ „int“ zur Aufzählung.
enum class Enum3; // Legal in C++11, default type is "int"
Alternative Ansätze:
Wenn eine Vorwärtsdeklaration aus Gründen der Abwärtskompatibilität oder aus anderen Gründen nicht möglich ist, gibt es alternative Ansätze, um eine ähnliche Kapselung zu erreichen:
Fazit:
Vorwärtsdeklaration von Aufzählungen ist in C 11 und späteren Versionen möglich durch explizite Angabe der Enum-Größe. In früheren Versionen von C können alternative Techniken eingesetzt werden, um eine ähnliche Kapselung zu erreichen.
Das obige ist der detaillierte Inhalt vonKönnen C-Enums vorwärts deklariert werden und wenn ja, wie und wann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!