Heim > Backend-Entwicklung > C++ > Kann ich deklarierte Enums in C weiterleiten und wie?

Kann ich deklarierte Enums in C weiterleiten und wie?

Patricia Arquette
Freigeben: 2024-12-11 00:27:14
Original
879 Leute haben es durchsucht

Can I Forward Declare Enums in C   and How?

Vorwärtsdeklaration von Enumerationen in C: Einschränkungen und Problemumgehungen

In C war die Vorwärtsdeklaration von Enumerationen bisher nicht möglich, da die Größe der Enumeration davon abhing dessen Inhalt. Mit der Einführung von C 11 wurde jedoch eine Vorwärtsdeklaration möglich, solange die Größe der Aufzählung explizit angegeben wird.

Problemstellung:

Das ursprüngliche Problem trat auf Beim Versuch, eine Enumeration weiterzuleiten, gehen Sie wie folgt vor:

enum E;

void Foo(E e);

enum E {A, B, C};
Nach dem Login kopieren

Dieser Code wurde von abgelehnt Compiler.

Erklärung:

In C 03 und früheren Versionen war die Vorwärtsdeklaration von Enumerationen nicht zulässig, da der Compiler dazu die Größe der Enumeration kennen musste speichert seine Werte. Die Größe einer Aufzählung hängt von der Anzahl und dem Typ ihrer Aufzählungswerte ab. Ohne diese Informationen konnte der Compiler keinen Speicher für die Aufzählung zuweisen.

Lösung in C 11 und höher:

In C 11 und späteren Versionen Deklaration von Aufzählungen weiterleiten ist durch explizite Angabe der Größe der Aufzählung möglich. Dies kann mit der Aufzählung erfolgen: Syntax, wobei ist der zugrunde liegende Typ der Aufzählung, z. B. unsigned int oder unsigned short.

Zum Beispiel:

enum Enum : unsigned int; // Forward declaration with an underlying type
void Foo(Enum e);

// Definition of the enum in a separate source file
enum Enum {
    VALUE1, VALUE2, VALUE3
};
Nach dem Login kopieren

Dieser Code wird jetzt erfolgreich kompiliert.

Überlegungen zu privaten Enum-Werten:

Im genannten spezifischen Szenario, wo sich die Enum-Werte befinden sollten Obwohl der Ansatz der Vorwärtsdeklaration privat gehalten wird, ist er immer noch praktikabel. Die Aufzählung kann privat in einer Header-Datei deklariert und intern in der Implementierungsdatei definiert werden, ohne dass die Aufzählungswerte den Clients zugänglich gemacht werden.

Es ist jedoch wichtig zu beachten, dass Vorwärtsdeklarationen den Zugriff auf die darin enthaltenen Aufzählungswerte nicht verhindern dieselbe Übersetzungseinheit (d. h. dieselbe Quelldatei oder derselbe Satz von Dateien, die zusammen kompiliert werden). Daher ist es weiterhin möglich, von anderen Teilen des Programms, die Zugriff auf die Header-Datei haben, auf die Enum-Werte zuzugreifen.

Das obige ist der detaillierte Inhalt vonKann ich deklarierte Enums in C weiterleiten und wie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage