
A pesar de la simplicidad (y, en general, la trivialidad, si lo piensa) de la solución descrita, me topé con ella por casualidad, mientras decoraba con un comentario el programa terminado, listo para entregar.
En la práctica de programación, una situación ocurre regularmente cuando durante el desarrollo y la depuración se requiere activar algún código y desactivar otro. Es fácil hacer esto con construcciones especiales como
#if true ... #else ... #endif
, cambiar
true
a
false
o recurrir a condiciones más sofisticadas.
Sin embargo, este diseño no permite la creación de más de dos secciones alternativas de código.En los idiomas que admiten un comentario como
/* ... */
c, utilizando una construcción ligeramente no estándar
/**/ ... /*/ ... /*/ ... /**/
puede crear tantas secciones de código alternativas arbitrarias que se encenderá y apagará alternativamente con solo un espacio en el primer (inicio) de los comentarios.
Por ejemplo:
Console.Write("1"); Console.Write("3"); Console.Write("5");
Cuando se ejecuta, este código generará la cadena
"135"
en la consola. Es decir, se ejecutarán todos los operadores de salida impares, y el último, que ya está fuera de toda la estructura. Pero si inserta un espacio (o, estrictamente hablando, cualquier carácter excepto un asterisco) en el comentario inicial entre el segundo asterisco y la barra inclinada, el mismo código generará la cadena
"245"
: solo se ejecutarán los operadores, y, nuevamente, el último Ya afuera. (UPD: gracias
FluffyMan por señalar el error).
La sintaxis de los comentarios del separador es extremadamente estricta: no puede agregar o agregar nada a la construcción
/*/
, esto destruirá su funcionalidad. La sintaxis de los comentarios de inicio y finalización, por el contrario, es completamente arbitraria. Puede ser minimalista para
/**/
, o puede contener cualquier comentario legal en el sentido del lenguaje. De lo cual queda claro que los comentarios de inicio y finalización son estrictamente necesarios, y que es simplemente imposible usar un comentario legal como
/* ... */
dentro de la propia estructura, porque inmediatamente se convertirá en una parada para toda la secuencia anterior de separadores de comentarios
/*/
, y un comienzo para toda la secuencia posterior de ellos. Pero el uso significativo de estos insertos puede ser útil.
Los comentarios de una sola línea
//
no afectan la funcionalidad.
Dixi :)