Condividi tramite


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

Quando un nome di funzione dichiarato nel programma viene usato senza parentesi, il compilatore non produce codice. Ciò si verifica indipendentemente dal fatto che la funzione accetta o meno parametri perché il compilatore calcola l'indirizzo della funzione; Tuttavia, poiché l'operatore di chiamata di funzione "()" non è presente, non viene eseguita alcuna chiamata. Questo risultato è simile al seguente:

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

In Visual C++, anche l'uso del livello di avviso 4 non genera alcun output di diagnostica. Non viene generato alcun avviso; non viene prodotto alcun codice.

Il codice di esempio seguente compila (con un avviso) e collega correttamente senza errori, ma non produce codice in riferimento a funcn( ). Per il corretto funzionamento, aggiungere l'operatore di chiamata di funzione "()".

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

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

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

Vedi anche

Ottimizzazione del codice