Ich habe gerade festgestellt, dass dies kompiliert ohne Fehler oder Warnungen mit -pedantic -Wall
mit gcc
und clang
.Funktion als Parameter für Funktion
#include <stdio.h>
int x = 0;
void func(int f(const char *)) {
f("func()!");
}
int main(void) {
func(puts);
}
Es scheint, dass der Parameter f
wie Zeiger behandelt wird int (*)(const char *)
in diesem Fall zu funktionieren.
Aber das ist ein Verhalten, das ich noch nie gesehen oder gehört habe. Ist das legale C-Code? Und wenn ja, was passiert, wenn Sie eine Funktion als Parameter für eine Funktion haben?
Funktionszeiger sind gültige Parameter, mit denen Sie zB verschiedene Callback-Funktionen übergeben können. Die Funktion, die sie empfängt, kann diese Funktion dann aufrufen, kein Problem. –
In diesem Fall wird der Typ des Parameters als "Funktion" und nicht als "Zeiger auf eine Funktion" geschrieben, in diesem Fall wäre stattdessen "int (* f) (const char *)" deklariert worden. – wefwefa3
Dies ist syntaktischer Zucker und erlaubt es, Deklarationen leichter lesbar zu machen. Siehe den ersten Kommentar zur akzeptierten Antwort der doppelten Frage. –