Mancata generazione di codice in seguito all'utilizzo di nomi di funzione senza ()

Quando il nome di una funzione dichiarata nel programma viene utilizzato senza parentesi, il compilatore non genera codice. Questo comportamento si verifica indipendentemente dal fatto che la funzione accetti parametri, in quanto il compilatore calcola l'indirizzo della funzione, ma poiché l'operatore di chiamata della funzione "()" non è presente, non viene effettuata alcuna chiamata. Il risultato è simile al seguente:

// compile with /Wall to generate a warning
int a;
a;      // no code generated here either

In Visual C++, anche impostando il livello di avvisi 4, non viene generato alcun output diagnostico. Non viene generato alcun avviso né codice.

Il codice di esempio riportato di seguito viene compilato, con un avviso, e collegato correttamente, senza errori, ma non produce codice in riferimento a funcn( ). Per il corretto funzionamento del codice, è necessario aggiungere l'operatore di chiamata della funzione "()".

#include <stdio.h>
void funcn();

int main() {
   funcn;      /* missing function call operator; 
                  call will fail.  Use funcn() */
   }

void funcn() {
   printf("\nHello World\n");
}

Vedere anche

Riferimenti

Ottimizzazione del codice