Können wir eine Funktionsadresse einer bestimmten Signatur in einen Funktionszeiger setzen, der so definiert ist, dass er eine andere Signatur hat und diese nahtlos verwendet?Kann ein Paar Zeiger auf verschiedene Funktionen, die verschiedene Arten von Parametern annehmen, kompatibel sein?
Zum Beispiel den folgenden Code
#include <stdio.h>
void print_n(int *pn) {
printf("%d\n", *pn);
}
void print_n_wrapper(void *p) {
print_n(p);
}
int main(void) {
int n = 123;
void (*f)(void *) = print_n_wrapper;
f(&n);
f = print_n;
f(&n);
return 0;
}
wird kompiliert und läuft in meiner Maschine in Ordnung. Rufe ich irgendwie undefiniertes Verhalten auf?
Ja, Sie rufen UB an. Diese Zeigertypen sind nicht kompatibel. –
Es Arbeit finden, aber Compiler sagt Ihnen "Warning: Zuweisung von inkompatiblen Zeigertyp" – LPs