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 der folgenden Express-gültigen Funktionsaufrufe:
(&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 darin, diese Formen zuzulassen, und betrachtete 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)zurück
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3