„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum können Funktionsnamen in C90 als Funktionszeiger verwendet werden?

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

Veröffentlicht am 23.12.2024
Durchsuche:729

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 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
Neuestes Tutorial Mehr>

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