Funktionszeiger-typedef für "void foo(){};"
-
Ich steh grad irgendwie aufm Schlauch:
irgendwo in einem Header steht:
void rddb_destroy();
in einer c-Datei wird der Header includiert und ein typedef angelegt:
typedef void (*methodBufferdFunctionWithoutParams) ( /* no parameters */ ); // irgendwo weiter unten: methodBufferdFunctionWithoutParams foo = rddb_destroy; // <-- hier warning foo();
Der Compiler spuckt mir jetzt eine nette warning aus:
warning C4276: 'rddb_destroy' : no prototype provided; assumed no parameters
Als Zeilenangabe steht die allerletzte Zeile in der Quelldatei dabei, die warning
verschwindet aber, wenn ich bei der Zweisung oben (ca. in der Mitte der Datei)
rddb_destroy durch 0
ersetzte.Der Prototyp ist auch bekannt, da ein direkter Aufruf von "rddb_destroy()" ohne
Probleme akzeptiert wird.Frage:
Was hab ich da falsch gemacht? Bei den anderen typedefs für Funktionen mit Parametern und Rückgabewert kommt die Warning nicht, wenn man die entsprechende
Funktion zuweist...
wird
-
Ein Prototyp ist eine Deklaration, die die Zahl und Typen der Argumente festlegt. Das:
void rddb_destroy();
ist kein Prototyp, sondern nur die Deklaration einer Funktion mit Rückgabetyp void. Willst du eine Funktion (mit Prototyp), die keine Argumente annimmt, dann musst du
void rddb_destroy(void);
schreiben. Das ganze hat historische Gründe (-> K&R) und wurde in C++ anders gelöst, aber in C ist es nunmal so.
Warum da eine Warnung kommt, kann ich dir nicht erklären, aber ich hoffe die Konfusion betreffs des Begriffs Prototyp ist wenigstens geklärt.
-
Wieder was dazugelernt.
Mit dem "void"-Parameter gibt's keine Warning mehr.
Thx