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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-12 03:22:02925Durchsuche

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)();

Funktionsaufrufe

Alle folgenden ausdrücklich gültigen Funktionen Aufrufe:

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

pf();
(*pf)();
(**pf)();
(***pf)();

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)

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!

Stellungnahme:
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