35 votes

Des moyens simples pour désactiver certaines parties du code

Ce n'est pas une question typique pour résoudre un problème spécifique, c'est plutôt un exercice cérébral, mais je me demande si quelqu'un a une solution.

Dans le cadre du développement, il est souvent nécessaire de désactiver ou de modifier certaines parties du code pour vérifier différentes approches. Pour ce faire, nous utilisons des commentaires ou des #defines mais mon préféré est :

//*
[code here]
//*/

Maintenant, lorsque vous enlevez juste la première barre oblique, le code sera commenté.

La question est la suivante : existe-t-il un moyen de mettre en œuvre un système similaire à celui de l'UE ? si-else changement de code ? J'ai essayé de le trouver mais j'ai toujours eu des problèmes et je n'ai pas pu trouver de solution qui fonctionne.

Et peut-être connaissez-vous des astuces similaires ?

3 votes

L'utilisation de commentaires sera problématique, car les commentaires ne peuvent pas être imbriqués. Si vous avez des commentaires à l'intérieur du code désactivé, cela ne fonctionnera pas.

1 votes

Bon point Joachim. Mais lorsque vous l'utilisez pendant le prototypage, vous n'utilisez pas autant de commentaires.

1 votes

Ah non, mais d'un autre côté, le code qui était censé n'être qu'un prototype a tendance à se glisser dans le code réel bien trop souvent dans le monde réel.

56voto

pb2q Points 28514

Envelopper le code avec #if 0 fait l'affaire, mais vous devez encore modifier le code pour l'activer ou le désactiver. Ce n'est pas beaucoup mieux que d'utiliser simplement le bloc de commentaires.

Notez que vous pouvez également utiliser une constante de préprocesseur définie :

#ifdef ENABLE_TESTS
// code that you want to run ONLY during tests 
#endif

Maintenant, lors de la construction du code, vous pouvez définir/définir sélectivement cette constante dans votre processus de construction - IDE/makefile/build script/ligne de commande - sans avoir besoin de modifier le code :

$ gcc -DENABLE_TESTS source.c

J'ai ajouté cette réponse pour contrebalancer toutes les réponses précédentes. #if 0 les réponses, mais cette construction de la réponse acceptée est la meilleure réponse à la question spécifique : /**/ foo(); /*/ bar(); /**/ . S'il vous plaît utiliser de telles astuces de commentaire avec parcimonie .

0 votes

Le nom est un peu déroutant. Je m'attendrais à compiler avec -DDISABLE_TEST pour désactiver le code de test. Ici, il l'active.

0 votes

ArjunShankar, oui, c'est déroutant.

3 votes

Oui, c'est mieux. Et c'est une réponse utile. +1.

34voto

Gigi Points 2858
#if 0
...disabled code here
#endif

4 votes

L'utilisation de #if 0 pour le code désactivé et de #if 01 pour le code activé permet de passer d'un cas à l'autre en tapant un seul caractère (un effacement ou un 1) plutôt que deux, (un effacement et la nouvelle valeur).

27voto

Michael Burr Points 181287

Je ne suis pas sûr de devoir poster ceci parce que ce n'est pas quelque chose que je considère comme du "bon code", mais j'admets avoir utilisé la technique suivante comme un moyen rapide de passer d'un petit bout de code à l'autre lorsque je vérifie quelque chose :

// in the following , foo() is active:
/**/ foo(); /*/ bar(); /**/

Maintenant, il suffit d'enlever un des astérisques à l'avant :

// now bar() is active:
/*/ foo(); /*/ bar(); /**/

Bien sûr, cela ne devrait jamais dépasser la phase de "vérification des choses"...

15 votes

@kolenda : #if 0 avec un #else fait la même chose, et c'est beaucoup plus propre...

13voto

oseiskar Points 995

Le préprocesseur if-else fonctionne également

#if 1
  // ... enabled if 1
#else
  // ... enabled if 0
#endif

6voto

Nick Dandoulakis Points 26809

Parfois, j'utilise l'astuce suivante pour basculer entre deux paresseux commentaires.

//* <-- remove the first slash
[code block 1]
/*/
[code block 2]
//*/

Prograide.com

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.

Powered by:

X