non abbiamo potuto dire che meglio usare, perché uno viene utilizzato in fase di compilazione (#if
) e l'altro viene utilizzato nella fase di runtime (if
)
#if 1
printf("this code will be built\n");
#else
printf("this code will not\n");
#endif
cerchiamo di costruire il codice di cui sopra con gcc -E
e vedrete che il compilatore genera un altro codice che contiene solo:
printf("this code will be build\n");
l'altro printf non sarà presente nel nuovo codice (codice del processore pre) e quindi non presente nel binario programma.
Conclusione: il #if
viene trattato in fase di compilazione, ma il normale if
viene trattato quando il programma eseguito
È possibile utilizzare la #if 0
in una parte del codice inorder per evitare il compilatore per compilarlo. è come avete commentato questa parte
esempio
int main(void) {
printf("this code will be build\n");
#if 0
printf("this code will not\n");
#endif
}
è equivalente a
int main(void) {
printf("this code will be built\n");
/*
printf("this code will not\n");
*/
}
Ricerca "preprocessore". –
Non capisco i -1. Anche se totalmente noobish, questa è una domanda abbastanza valida. E non così facilmente googlable se non si conosce la parola chiave "preprocessore". – Dariusz
Non capisco i voti "vicini come non costruttivi": questa è una domanda alquanto semplice ma completamente legittima. – dasblinkenlight