Possiamo inserire un indirizzo di funzione di una particolare firma in un puntatore di funzione che è definito per avere qualche altra firma e usarlo senza problemi?Può essere compatibile una coppia di puntatori a funzioni diverse che accettano diversi tipi di parametri?
Ad esempio, il seguente codice di
#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;
}
viene compilato e funziona bene nella mia macchina. Sto invocando in qualche modo un comportamento indefinito?
Sì, si sta invocando UB. Quei tipi di puntatore non sono compatibili. –
Trova lavoro, ma il compilatore ti dice 'warning: assegnazione da tipo di puntatore incompatibile' – LPs