2015-02-11 7 views
5

se avete qualcosa di simile:ciò che accade a una funzione C statica che non si chiama

int _tmain(int argc, _TCHAR* argv[]) { 
    int i; 
#if (num>99) 
    i = func(); 
#else 
    i= func2(); 
#endif 
    return 0; 
} 

static int func() 
{ 
    return 1; 
} 
static int func2() 
{ 
    return 2; 
} 

E 'ragionevole aspettarsi che a seconda se num è più grande o più piccolo, allora il 99 etere func o func2 sarà rimosso dal codice runtime?

O preferirei incorporare le funzioni in un #if per raggiungere questo obiettivo?

+6

"Il codice di runtime" non fa parte dello standard C, quindi lo standard C non può rispondere a questa domanda. È una questione di come funziona il tuo linker. La rimozione del codice morto è sicuramente una strategia di ottimizzazione conosciuta e utilizzata che è disponibile su molte piattaforme. –

risposta

2

Questo dipende dal linker, che cosa fa con codice morto è specifico del linker. È inoltre necessario includere la definizione della funzione in #if per assicurarsi che non si traduca in codice macchina.

1

Si avrebbe bisogno di incorporare le definizioni di funzione anche in un #if per raggiungere l'obiettivo.

codice

può essere qualcosa di simile:

Diciamo che la variabile "num" sta diventando la configurazione modulo popolata.

int _tmain(int argc, _TCHAR* argv[]) { 
    int i; 
#if (num>99) 
    i = func(); 
#else 
    i= func2(); 
#endif 
    return 0; 
} 

#if(num>99) 
static int func() 
{ 
    return 1; 
} 
#else 
static int func2() 
{ 
    return 2; 
} 
#endif 

Spero che sia d'aiuto. Grazie!

Problemi correlati