Commentaire hors code: petit hack de vie

Malgré la simplicité (et, en général, la trivialité, si vous y pensez) de la solution décrite, je suis tombé dessus par hasard, tout en décorant avec un commentaire le programme fini, prêt à être livré.

Dans la pratique de la programmation, une situation se produit régulièrement lorsque, pendant le développement et le débogage, il est nécessaire d'activer un code et d'en désactiver un autre. Il est facile de le faire avec des constructions spéciales comme #if true ... #else ... #endif , en changeant true en false ou en recourant à des conditions plus sophistiquées. Cependant, cette conception ne permet pas la création de plus de deux sections alternatives de code.

Dans les langues qui prennent en charge un commentaire comme /* ... */ c, en utilisant une construction légèrement non standard /**/ ... /*/ ... /*/ ... /**/ vous pouvez créer autant de sections de code alternées arbitraires que s'allume et s'éteint alternativement avec un seul espace dans le premier (début) des commentaires.

Par exemple:

 /**/ Console.Write("1"); /*/ Console.Write("2"); /*/ Console.Write("3"); /*/ Console.Write("4"); /**/ Console.Write("5"); 

Une fois exécuté, ce code affichera la chaîne "135" sur la console. Autrement dit, tous les opérateurs de sortie impairs seront exécutés - et le dernier, qui est déjà en dehors de la structure entière. Mais si vous insérez un espace (ou, à proprement parler, n'importe quel caractère sauf un astérisque) dans le commentaire de début entre le deuxième astérisque et la barre oblique, le même code affichera la chaîne "245" : seuls les opérateurs pairs seront exécutés et, encore une fois, le dernier déjà dehors. (UPD: merci FluffyMan pour avoir signalé l'erreur).

La syntaxe des commentaires du séparateur est extrêmement stricte: vous ne pouvez pas ajouter ou ajouter quoi que ce soit à la construction /*/ , cela détruira sa fonctionnalité. Au contraire, la syntaxe des commentaires de début et de fin est complètement arbitraire. Il peut être minimaliste pour /**/ , ou il peut contenir des commentaires - légaux au sens de la langue -. D'où il est clair que les commentaires de démarrage et d'arrêt sont strictement nécessaires, et qu'il est tout simplement impossible d'utiliser un commentaire juridique comme /* ... */ à l'intérieur de la structure elle-même, car il deviendra immédiatement un arrêt pour toute la séquence précédente de séparateurs de commentaires /*/ , et un début pour toute la séquence suivante d'entre eux. Mais l'utilisation significative de ces inserts peut être utile.

Les commentaires sur une seule ligne // n'affectent pas la fonctionnalité.

Dixi :)

Source: https://habr.com/ru/post/fr434300/


All Articles