Heim > Backend-Entwicklung > C++ > Warum können Funktionsnamen in C90 als Funktionszeiger verwendet werden?

Warum können Funktionsnamen in C90 als Funktionszeiger verwendet werden?

Susan Sarandon
Freigeben: 2024-11-12 03:22:02
Original
991 Leute haben es durchsucht

Why Can Function Names Be Used as Function Pointers in C90?

Funktionsnamen als Funktionszeiger verwenden

Das Begründungsdokument von C90 bietet Einblick in die Entwurfsentscheidung zur Gleichsetzung von Funktionsnamen mit Funktionszeigern. Diese Bequemlichkeit vereinfacht die Verwendung von Funktionszeigern in bestimmten Kontexten.

Funktionsdeklarationen

Beachten Sie die Deklarationen:

int f();
int (*pf)();
Nach dem Login kopieren

Funktionsaufrufe

Alle folgenden ausdrücklich gültigen Funktionen Aufrufe:

(&f)();
f();
(*f)();
(**f)();
(***f)();

pf();
(*pf)();
(**pf)();
(***pf)();
Nach dem Login kopieren

Der erste Ausdruck in jeder Zeile wurde zuvor behandelt. Der zweite ist konventionell. Nachfolgende Ausdrücke implizieren in den meisten Kontexten eine implizite Konvertierung des Funktionsbezeichners in einen Zeigerwert.

Begründung des Entwurfs

Das Komitee sah keine wesentlichen Nachteile bei der Zulassung dieser Formen und prüfte sie sie als übermäßige Anstrengung zu ächten. Daher bietet die Äquivalenz zwischen Funktionsbezeichnern und Funktionszeigern eine bequemere Verwendung von Zeigern.

Implizite Konvertierung

Eine weitere interessante Beobachtung ist die implizite Konvertierung von Funktionstypen in Zeiger bei Verwendung als Parameter, aber nicht als Rückgabetypen:

typedef bool FunctionType(int);
void g(FunctionType); // Implicitly converts to void g(FunctionType *)
FunctionType h(); // Error
FunctionType *j(); // Returns a function pointer with the type bool(int)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum können Funktionsnamen in C90 als Funktionszeiger verwendet werden?. 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