Dies ist schlecht gebildet in C ++ aus dem Entwurf Standardabschnitt 8.3.5
Funktionen Absatz 10 sagt :
Ein typedef des Funktionstyps kann verwendet werden, um eine Funktion zu deklarieren, aber nicht um eine Funktion zu definieren (8.4). [Beispiel:
%Vor%-endebeispiel] [...]
Das können wir in C sehen. Dies ist auch ausdrücklich aus dem C99-Standardentwurfsabschnitt 6.9.1
Funktionsdefinitionen ausgeschlossen:
Der in einer Funktionsdefinition deklarierte Bezeichner (der Name der Funktion) soll einen Funktionstyp haben, wie er durch den Deklaratorteil der Funktionsdefinition angegeben ist 141
und Fußnote 141
sagt:
Die Absicht ist, dass der Typentyp in einer Funktionsdefinition nicht von typedef geerbt werden kann:
und hat das folgende Beispiel:
%Vor% C11 sagt dieselben Dinge mit Ausnahme der Fußnote 162
.
Nein. Sie können typedef zu deklarieren einer Funktion verwenden:
%Vor%aber eine Funktionsdefinition muss mit einem Deklarator in Funktionsstil geschrieben werden.
Hinweis: Dies ist sicherlich der Fall in C ++, und ich bin ziemlich sicher, dass C in dieser Hinsicht das gleiche ist; aber es wäre besser, wenn Sie eine einzige Sprache wählen würden, nach der Sie fragen könnten, da es signifikante Unterschiede zwischen C und C ++ geben kann, selbst wenn Sie sich vorstellen, dass sie identisch sind.
Sie könnten #define
s verwenden, um zu simulieren, was die C-Sprache nicht zulässt (wie Mike Seymour Antwort ):
Ob eure Kollegen-Codierer euch dafür mögen werden, ist eine andere Geschichte.
Schreiben Sie einfach int f(int x) { return 2*x; }
.
Wenn Sie einen "FunkyFunc" als Parameter an eine andere Funktion übergeben möchten, zum Beispiel
void do_something(FunkyFunc *func) { ... }
Dann kannst du einfach
schreiben do_something(&f);
Was Sie geschrieben haben, funktioniert nicht so, wie Sie es möchten. Typedef ist ein Alias für einen anderen Typ. Stellen Sie sich vor, dass Ihr Typdef nicht viel mehr als ein #define ist. Dann sehen Sie, wie der Code aussehen würde.
%Vor%Diese Syntax wird nicht kompiliert.