En C/C++
Qu'arrive-t-il au code placé entre un bloc #if 0/#endif ?
#if 0
//Code goes here
#endif
Est-ce que le code est simplement ignoré et n'est donc pas exécuté ?
En C/C++
Qu'arrive-t-il au code placé entre un bloc #if 0/#endif ?
#if 0
//Code goes here
#endif
Est-ce que le code est simplement ignoré et n'est donc pas exécuté ?
Non seulement il n'est pas exécuté, mais il n'est même pas compilé.
#if
est une commande du préprocesseur, qui est évaluée avant l'étape de compilation proprement dite. Le code contenu dans ce bloc n'apparaît pas dans le binaire compilé.
Il est souvent utilisé pour supprimer temporairement des segments de code dans l'intention de les réactiver plus tard.
C'est identique à la mise en commentaire du bloc, à une différence près : L'imbrication n'est pas un problème. Considérez ce code :
foo();
bar(x, y); /* x must not be NULL */
baz();
Si je veux le commenter, je peux essayer :
/*
foo();
bar(x, y); /* x must not be NULL */
baz();
*/
Bzzt. Erreur de syntaxe ! Pourquoi ? Parce que les commentaires de bloc ne s'emboîtent pas, et donc (comme vous pouvez le voir dans la coloration syntaxique de SO) la balise */
après le mot "NULL" termine le commentaire, ce qui rend le baz
non commenté, et l'appel */
après baz
une erreur de syntaxe. D'autre part :
#if 0
foo();
bar(x, y); /* x must not be NULL */
baz();
#endif
Travaille pour commenter l'ensemble. Et le #if 0
vont s'imbriquer les uns dans les autres, comme ceci :
#if 0
pre_foo();
#if 0
foo();
bar(x, y); /* x must not be NULL */
baz();
#endif
quux();
#endif
Bien sûr, cela peut être un peu confus et devenir un casse-tête de maintenance si ce n'est pas commenté correctement.
Lorsque le préprocesseur voit #if, il vérifie si le jeton suivant a une valeur non nulle. Si c'est le cas, il conserve le code pour le compilateur. Si ce n'est pas le cas, il se débarrasse de ce code pour que le compilateur ne le voie jamais.
Si quelqu'un dit #if 0, il commente effectivement le code afin qu'il ne soit jamais compilé. Vous pouvez penser que c'est la même chose que s'il avait mis /* ... */ autour. Ce n'est pas tout à fait la même chose, mais cela a le même effet.
Si vous voulez comprendre ce qui s'est passé en détail, vous pouvez souvent regarder. De nombreux compilateurs vous permettront de voir les fichiers après l'exécution du préprocesseur. Par exemple, avec Visual C++, la commande switch /P exécutera le préprocesseur et placera les résultats dans un fichier .i.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.