Recentemente ho appreso che questo è C legale:sintassi alternativa per le funzioni C che assumono un'altra funzione come parametro
#include <stdio.h>
int foo(int bar(int))
{
return bar(42);
}
int bar(int x)
{
return x * 42;
}
int main()
{
printf("Baz = %d\n", foo(bar));
return 0;
}
compila senza avvisi e viene eseguito come previsto (compila e funziona bene anche come un programma C, piuttosto che C++)
rep ~/Documents $ g++ -Wall test.cpp
rep ~/Documents $ ./a.out
Baz = 1764
rep ~/Documents $
Perché non è questa sintassi utilizzati più spesso o addirittura menzionato da nessuna parte?
Interessante ... non ho visto quella sintassi prima di me. Mi sarei aspettato che la firma leggesse 'int foo (int (* bar) (int))'. – bgoldst
Negli elenchi di parametri, i tipi di funzione sono regolati su puntatore-a-funzione, proprio come il tipo di matrice viene regolato su puntatore-elemento. –
È esattamente uguale a 'int foo (int (* bar) (int))'. Non so perché non è usato spesso però. – 0x499602D2