Escriba algún programa (el tamaño no importa) y coloque una línea que parezca inútil, pero en realidad no lo es: si se eliminara, el programa se bloquearía o haría algo mal. Siéntase libre de marcar la línea que parece no utilizada por un comentario, o mencione la descripción de su código, como en el ejemplo a continuación (por supuesto, en este ejemplo, la línea en realidad no es necesaria, es solo un ejemplo).
int main(void) {
/* The line below is actually needed. */
2 + 2;
return 0;
}
Como se trata de un concurso de popularidad, gana la solución con el mayor número de votos.
popularity-contest
underhanded
Konrad Borowski
fuente
fuente
Respuestas:
do
No se compilará si eliminamos el single
;
.EDITAR :
Solución a continuación:
fuente
C / C ++
Solo un código escrito en el estilo de introducción / tutorial ...
Tutorial nr. 2 : leer en números, realizar operaciones matemáticas en ellos e imprimir los resultados.
Eliminar la línea
result = 42;
que a primera vista parece superflua y, teniendo en cuenta el objetivo declarado, realmente incorrecto, hará que el programa no haga lo que dice la descripción.¿Por qué?
fuente
>!
lugar de solo>
.>!
en todas las líneas. Pensé que no se muestran para mí mientras los escribía. Curiosamente, el analizador SE no lo estropea :)"stdio.h"
lugar de la biblioteca real,<stdio.h>
Espacio en blanco
Lamentablemente, no puedo mostrar mi programa aquí porque StackExchange elimina todos los espacios en blanco finales. Lo mismo ocurre con pastebin.com y pastie.org, por lo que tampoco puedo vincularlo.
Por supuesto, todo el programa "parece inútil", pero si elimina cualquier línea, hará algo diferente.
fuente
JavaScript:
fuente
b
valor dealert(a)
": Entonces, ¿no deberíab+-
ser asíb+=
?b++
ob--
.b + -2 + 2
. Es por eso que si elimina la línea con2 + 2;
, se evalúa comob + -alert(a);
.DO:
Si elimina la línea
i = i;
, el código no funcionará. Esto es porque...fuente
APL
Aquí hay una función APL:
Hace lo mismo que la monádica de J
i.
:Puede tomar un argumento izquierdo opcional que proporcione el desplazamiento:
La línea
⍺←⎕IO ⋄ ⎕IO←⍺
parece inútil ("asignar⎕IO
a⍺
, luego asignar⍺
a⎕IO
"), pero la primera parte solo se ejecuta si no se proporciona un argumento izquierdo, por lo que de hecho hace algo:⍺
se proporciona, establezca⍺
en (global)⎕IO
.⎕IO
en⍺
fuente
DO#
La variable
fibo
debe asignarse antes de poder usarla dentro de una lambda, incluso si se está asignando esa lambda afibo
sí misma. Si elimina la asignación (aparentemente inútil), se producirá un error del compilador ("Uso de la variable local no asignada 'fibo'").fuente
Lote de Windows:
Configure el programa en ejecución y modifique el archivo a:
Si elimina o cambia el tamaño del comentario, causará estragos ya que la primera instancia del programa se detiene y luego continúa interpretando desde el byte 19 en adelante.
fuente
Java
Es un programa de trabajo que recupera una página web desde una URL. Te sorprendería que la línea
compila sin siquiera una advertencia. De hecho, el programa no se compila sin él.
fuente
Rubí
Algo similar surgió recientemente en el trabajo: un compañero de trabajo en realidad marcó mi inicialización aparentemente innecesaria durante la revisión del código, y realmente estuve tentado de poner la explicación dentro de un bloque de spoilers. Así que haré eso aquí.
Salida como es:
Salida con la primera línea del método eliminada:
fuente
match = Prime.find { |n| n.to_s[regexp] }
Prime.find
devuelven
(por ejemplo, 223), ymatch
debe sern.to_s[regexp]
(por ejemplo, "22"). Obviamente ideé el problema para hacerlo necesario.find
enPrime
y no una matriz. De todos modos, todavía es bastante fácil darse cuenta de por qué se necesita esa línea ...PHP
Aquí
\n//This is a comment
es necesario. Sin él, el código no se ejecutará.Al menos
\n
es necesario un carácter despuésEOT;
de ejecutarlo correctamentefuente
JAVASCRIPT
Sin el punto y coma,
a
se convertiría en el valor de retorno de la segunda función, en este caso, esundefined
. Porque la función originalmente asignada aa
se ejecutará de inmediato con la segunda función como argumentob
.fuente
COBOL (IBM Mainframe)
Si ejecuta el programa anterior (cualquier IBM Mainframe COBOL desde COBOL II (primer compilador de IBM al estándar de 1985, probablemente también otros COBOL de IBM) el resultado es:
Sin embargo, si quita la línea triplemente inútil "MOVER ESPACIO A W-CUANDO SE COMPILA". (el campo tiene un valor inicial de espacio, y tiene otro contenido colocado en él en la siguiente instrucción, y se ramifica de todos modos) el programa no produce salida y en realidad Abends (U4038) (eso significa que se bloquea) con el siguiente mensaje :
(el código y el texto del mensaje variarían entre los compiladores, las compensaciones dependen del compilador real utilizado y las opciones de compilación, la dirección depende de dónde se carga el programa cuando se ejecuta).
El motivo es el
NEXT SENTENCE
. Se trata de unaSecret GO TO
. El compilador busca el siguiente punto / punto completo en la fuente y genera una rama a la siguiente instrucción. Desde COBOL II, el uso de paradas completas / períodos fue relajado. Un programa debe terminar con un punto / punto completo. En este caso, la rama está fuera del final del programa.Ambos programas compilan 100% limpio (sin mensajes de diagnóstico, código de retorno de cero).
Este comportamiento es una tonta "Extensión de IBM" para COBOL. El estándar de 1985 no permite
NEXT SENTENCE
dentro deIF
/END-IF
(CONTINUE
se usa en su lugar, que es un no-op). IBM lo permitió, causando horribles Gotchas de vez en cuando.fuente
fuente
blah
? Aquí con OpenBSD 5.5 / amd64 y el sistema gcc, nunca falla, yablah
sea que exista o no . El programa compilado asigna 16 bytes de espacio de pila y copia el valor de 16 bits de "ok" a los primeros 2 bytes. El tercer byte no inicializado tiene '\ 0' por suerte. Siblah
está allí, está en el byte 16 y aún no termina la cadena.~ - ~!
Este es probablemente el más estúpido y obvio aquí.
Lanza un error sin esa segunda línea, con ella imprime
y
.fuente
~-~!
Lote de Windows
Este es un archivo por lotes que imprime los números del 1 al 10 con una línea vacía después de cada uno:
Esto efectivamente hace uso de un truco sucio para almacenar una nueva línea dentro de una variable (el uso de expansiones retrasadas elimina la línea NL de aspecto más aterrador en la respuesta vinculada). Si elimina o cambia las dos líneas en blanco completamente inútiles sobre el comentario, bueno, no funcionará.
fuente
troff
Troff es el sistema de procesamiento de texto más maravilloso. Lo uso para mis documentos. Requiere un sistema macro para estar listo para ser utilizado, y el más famoso es el
ms
paquete macro. Vamos a compilar el siguiente fragmento de código con la-ms
opción clásica .La tercera línea parece ser inútil, y en realidad sería inútil sin el paquete macro. Como está seguido dos líneas más abajo por un posicionamiento vertical absoluto, podría parecer que no tiene sentido imprimir nada antes. Pero sin este personaje invisible, el posicionamiento vertical no tendrá ningún efecto, aunque no estoy absolutamente seguro de poder explicar por qué (vea este hilo si desea echar un vistazo a la discusión). Esto enloquece al nuevo usuario, pero el truco debería familiarizarse con el usuario más experimentado.
Acabo de consultar con mi versión favorita de troff, que no es muy conocida (heirloom troff), pero estoy bastante seguro de que todavía funciona igual con GNU troff.
fuente