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!