Ich habe eine Reihe von Funktionen mit dem gleichen Prototyp, sageKann ein Funktionsprototyp typedef in Funktionsdefinitionen verwendet werden?
int func1(int a, int b) {
// ...
}
int func2(int a, int b) {
// ...
}
// ...
Nun, ich mag ihre Definition und Erklärung vereinfachen. Natürlich könnte ich einen Makro so verwenden:
#define SP_FUNC(name) int name(int a, int b)
Aber ich mag es in C halten, so dass ich versuchte, den Speicherspezifikations typedef
für diesen Einsatz:
typedef int SpFunc(int a, int b);
Dies scheint darauf hinzu gut funktionieren für die Erklärung:
SpFunc func1; // compiles
aber nicht für die Definition:
SpFunc func1 {
// ...
}
, die mir die folgende Störung gibt:
error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
Gibt es eine Möglichkeit, dies richtig zu tun oder ist es unmöglich? Zu meinem Verständnis von C sollte dies funktionieren, aber es nicht. Warum?
Hinweis, versteht gcc, was ich zu tun versuchen, weil, wenn ich
SpFunc func1 = { /* ... */ }
schreiben erzählt es mir
error: function 'func1' is initialized like a variable
Was bedeutet, dass gcc versteht, dass SpFunc eine Funktion ist Art.
Ich hatte Angst davor. Danke, dass du das bestätigt hast. Gibt es dafür Gründe? Es scheint mir ein nützliches Feature zu sein. – bitmask
@bitmask: Funktionen können eine typedef teilen, haben aber unterschiedlich benannte Argumente - die Namen sind nicht Teil der Funktionssignatur und können sogar weggelassen werden, wenn die Deklaration nicht Teil der Definition ist – Christoph