Stavo guardando un codice che un amico mi ha mandato e ha detto: "Compila, ma non funziona". Ho visto che ha usato le funzioni senza le parentesi, qualcosa di simile:Perché il compilatore C++ non si lamenta quando utilizzo le funzioni senza parentesi?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
La prima ho detto è stata "Utilizzare le parentesi, si devono". E poi ho testato quel codice - lo fa compilare, ma quando viene eseguito non funziona (non viene mostrato "Hello world").
Allora, perché lo fa compilare (nessun avvertimento a tutti dal compilatore GCC 4.7 ), ma non funziona?
In realtà funziona. 'pippo' viene trattato così com'è, un puntatore a funzione. La riga 'pippo;' è solo una riga senza effetto. Se si attivano gli avvisi al massimo si dovrebbe ottenere un avviso su una dichiarazione senza effetto. – RedX
Vedo * "warning: statement è un riferimento, non una chiamata, alla funzione 'foo'" * e * "warning: l'istruzione non ha effetto" *. Probabilmente vuoi compilare con -Wall -Wextra – Flexo
(Per le domande future vale la pena inserire il '#include' e qualsiasi spazio dei nomi anche per completare il tuo esempio) –
Flexo