Sapendo che questa chiamata:Perché questo puntatore funziona senza avvertimenti o errori?
pow(4);
genererà questo messaggio di errore:
error: too few arguments to function ‘pow’
sto imparando puntatori a funzioni e ho avuto sorpreso quando visto questo codice qui sotto a lavorare. Ma perché?
#include<stdio.h>
#include<math.h>
void aux(double (*function)(), double n, double x);
int main(void)
{
aux(pow, 4, 2);
aux(sqrt, 4, 0);
return 0;
}
void aux(double (*function)(double), double n, double x)
{
if(x == 0)
printf("\nsqrt(%.2f, %.2f): %f\n", n, x, (*function)(n));
else
printf("\npow(%.2f, %.2f): %f\n", n, x, (*function)(n));
}
ho compilato utilizzando:
gcc -Wall -Wextra -pedantic -Wconversion -o test test.c -lm
Il risultato è:
pow(4.00, 2.00): 16.000000
sqrt(4.00, 0.00): 2.000000
se cambio il terzo parametro della prima chiamata di aux
a 3, il risultato cambia a:
pow(4.00, 3.00): 64.000000
sqrt(4.00, 0.00): 2.000000
E ancora una domanda. Qual è il modo corretto per dichiarare e utilizzare i puntatori alle funzioni in questo caso?
@SouravGhosh: Non è questo il problema. Un '-lm mancante causerebbe un errore del linker. –
@KeithThompson Giusto signore. Colpa mia. –
@SouravGhosh Non c'è bisogno di scusarsi. Basta eliminare i commenti errati e fastidiosi e andare avanti. –