
Apesar da simplicidade (e, em geral, da trivialidade, se você pensar a respeito) da solução descrita, eu a deparei puramente por acaso, enquanto decorava com um comentário o programa finalizado, pronto para entrega.
Na prática de programação, ocorre regularmente uma situação em que, durante o desenvolvimento e a depuração, é necessário ativar um código e desativar outro. É fácil fazer isso com construções especiais como
#if true ... #else ... #endif
, alterando
true
para
false
ou recorrendo a condições mais sofisticadas.
No entanto, esse design não permite a criação de mais de duas seções alternativas de código.Em idiomas que suportam um comentário como
/* ... */
c, usando uma construção um pouco fora do padrão
/**/ ... /*/ ... /*/ ... /**/
você pode criar seções de código arbitrariamente alternadas que alternadamente, liga e desliga com apenas um espaço no primeiro (início) dos comentários.
Por exemplo:
Console.Write("1"); Console.Write("3"); Console.Write("5");
Quando executado, esse código gera a string
"135"
no console. Ou seja, todos os operadores de saída ímpares serão executados - e o último, que já está fora de toda a estrutura. Mas se você inserir um espaço (ou, estritamente falando, qualquer caractere, exceto um asterisco) no comentário inicial entre o segundo asterisco e a barra, o mesmo código exibirá a sequência
"245"
: apenas operadores serão executados e, novamente, o último já está lá fora. (UPD: obrigado
FluffyMan por apontar o erro).
A sintaxe dos comentários do separador é extremamente rigorosa: você não pode adicionar ou adicionar nada à construção
/*/
, isso destruirá sua funcionalidade. A sintaxe dos comentários iniciais e finais, pelo contrário, é completamente arbitrária. Pode ser minimalista para
/**/
, ou pode conter qualquer comentário - legal no sentido do idioma -. A partir do qual fica claro que os comentários iniciais e finais são estritamente necessários e que é simplesmente impossível usar um comentário legal como
/* ... */
dentro da própria estrutura, porque ele se tornará imediatamente uma parada para toda a sequência anterior de separadores de comentários
/*/
e um início para toda a sequência subsequente deles. Mas o uso significativo dessas inserções pode ser útil.
Comentários de linha única
//
não afetam a funcionalidade.
Dixi :)