Escreva algum programa (o tamanho não importa) e coloque uma linha que pareça inútil, mas na verdade não é - se for removida, o programa falhará ou fará algo errado. Sinta-se à vontade para marcar a linha que não parece ser usada por um comentário ou mencionar a descrição do código, como no exemplo abaixo (é claro que, neste exemplo, a linha não é realmente necessária, é apenas um exemplo).
int main(void) {
/* The line below is actually needed. */
2 + 2;
return 0;
}
Como este é um concurso de popularidade, a solução com maior número de votos vence.
popularity-contest
underhanded
Konrad Borowski
fonte
fonte
Respostas:
C
Não será compilado se removermos o single
;
.EDIT :
Solução abaixo:
fonte
C / C ++
Apenas algum código escrito no estilo de introdução / tutorial ...
Tutorial nr. 2 : ler números, executar operações matemáticas neles e imprimir os resultados.
Remover a linha
result = 42;
que, à primeira vista, parece supérflua e, considerando o objetivo declarado, realmente errado, fará com que o programa não faça o que a descrição afirma.Por quê?
fonte
>!
vez de apenas>
.>!
não usei apenas em todas as linhas. Eu acho que eles não são exibidos para mim como eu os escrevi. Curiosamente, o analisador SE não estraga tudo :)"stdio.h"
em vez da biblioteca real incluem,<stdio.h>
Espaço em branco
Infelizmente, não posso mostrar meu programa aqui porque o StackExchange retira todo o espaço em branco à direita. O mesmo vale para pastebin.com e pastie.org, portanto, também não posso vincular a ele.
Obviamente, o programa inteiro "parece inútil", mas se você remover qualquer linha, ele fará algo diferente.
fonte
JavaScript:
fonte
b
valor dealert(a)
": Então, não deveriab+-
serb+=
?b++
oub--
.b + -2 + 2
. É por isso que se você excluir a linha com2 + 2;
, ela será avaliada comob + -alert(a);
.C:
Se você excluir a linha
i = i;
, o código não funcionará. Isto é porque...fonte
APL
Aqui está uma função APL:
Faz o mesmo que o monádico de J
i.
:Pode-se usar um argumento à esquerda opcional que fornece o deslocamento:
A linha
⍺←⎕IO ⋄ ⎕IO←⍺
parece inútil ("atribuir⎕IO
a⍺
, depois atribuir⍺
a⎕IO
"), mas a primeira parte só será executada se nenhum argumento à esquerda for fornecido, portanto, na verdade, ele faz algo:⍺
for dado, defina⍺
como (global)⎕IO
.⎕IO
para⍺
fonte
C #
A variável
fibo
deve ser atribuída antes que você possa usá-la dentro de um lambda, mesmo se você estiver atribuindo esse lambda afibo
si próprio. Se você remover a atribuição (aparentemente inútil), ocorrerá um erro do compilador (“Uso da variável local não atribuída 'fibo'”).fonte
Lote do Windows:
Defina o programa em execução e modifique o arquivo para:
Se você remover ou redimensionar o comentário, ele causará estragos quando a 1ª instância do programa for pausada e continuará a interpretar a partir do 19º byte em diante.
fonte
Java
É um programa de trabalho que recupera uma página da web de um URL. Você pode se surpreender que a linha
compila sem sequer um aviso. De fato, o programa não compila sem ele.
fonte
Rubi
Uma coisa semelhante surgiu recentemente - um colega de trabalho sinalizou minha inicialização aparentemente desnecessária durante a revisão de código, e fiquei realmente tentado a colocar a explicação dentro de um bloco de spoilers. Então eu vou fazer isso aqui.
Saída como está:
Saída com a primeira linha do método removida:
fonte
match = Prime.find { |n| n.to_s[regexp] }
Prime.find
retornan
(por exemplo, 223) ematch
precisa sern.to_s[regexp]
(por exemplo, "22"). Obviamente, inventei o problema para tornar isso necessário.find
onPrime
e não um array. Enfim, ainda é bastante fácil perceber por que essa linha é necessária ...PHP
Aqui,
\n//This is a comment
é necessário. Sem ele, o código não será executado.Pelo menos um
\n
caractere é necessário depoisEOT;
para executá-lo corretamentefonte
JAVASCRIPT
Sem o ponto-e-vírgula, então
a
seria o valor de retorno da 2ª função - nesse caso, éundefined
. Porque a função originalmente atribuída aa
será executada imediatamente com a segunda função como argumentob
.fonte
COBOL (Mainframe da IBM)
Se você executar o programa acima (qualquer IBM Mainframe COBOL desde COBOL II (primeiro compilador IBM para o padrão 1985, provavelmente outros IBM COBOLs também)), a saída será:
No entanto, se você remover a linha triplamente inútil "MOVER ESPAÇO PARA W-WHEN-COMPILED". (o campo tem um valor inicial de espaço e tem outro conteúdo nele na próxima instrução, e é ramificado de qualquer maneira) o programa não produz saída e, na verdade, é encerrado (U4038) (isso significa que ele trava) com a seguinte mensagem :
(o código e o texto da mensagem variam entre os compiladores, as compensações dependem do compilador real usado e das opções de compilação; o endereço depende de onde o programa é carregado quando EXECUTADO).
O motivo é o
NEXT SENTENCE
. Isto é umSecret GO TO
. O compilador procura o próximo ponto / ponto final na fonte e gera uma ramificação para a seguinte instrução. No COBOL II, o uso de pontos / períodos completos foi relaxado. Um programa deve terminar com um ponto final / período. Nesse caso, a ramificação está fora do final do programa.Ambos os programas compilam 100% de limpeza (sem mensagens de diagnóstico, código de retorno zero).
Esse comportamento é um "IBM Extension" idiota para COBOL. O Padrão de 1985 não permite
NEXT SENTENCE
dentro deIF
/END-IF
(CONTINUE
é usado em vez disso, o que é um no-op). A IBM permitiu - causando Gotchas horríveis de tempos em tempos.fonte
fonte
blah
? Aqui, com o OpenBSD 5.5 / amd64 e o sistema gcc, ele nunca é segmentado, esteja ou nãoblah
presente. O programa compilado aloca 16 bytes de espaço na pilha e copia o valor de 16 bits de "ok" para os 2 primeiros bytes. O terceiro byte não inicializado tem '\ 0' por sorte. Seblah
houver, ele está no 16º byte e ainda não está encerrando a string.~ - ~!
Este é provavelmente o mais estúpido e óbvio aqui.
Ele gera um erro sem essa segunda linha, com ela é impressa
y
.fonte
~-~!
Lote do Windows
Este é um arquivo em lotes que imprime os números 1 a 10 com uma linha vazia após cada um:
Isso efetivamente utiliza um hack sujo para armazenar uma nova linha dentro de uma variável (o uso de expansões atrasadas se livra da linha NL de aparência mais assustadora na resposta vinculada). Se você remover ou alterar as duas linhas em branco completamente inúteis acima do comentário, bem, não funcionará.
fonte
troff
Troff é o mais maravilhoso sistema de processamento de texto. Eu o uso para meus documentos. Requer um sistema de macro para estar pronto para ser usado, e o mais famoso é o
ms
pacote de macro. Vamos compilar o seguinte trecho de código com a-ms
opção clássica .A terceira linha parece ser inútil e seria realmente inútil sem o pacote de macro. Como é seguido duas linhas abaixo por um posicionamento vertical absoluto, pode parecer sem sentido imprimir nada antes. Mas sem esse caráter invisível, o posicionamento vertical não terá efeito, embora eu não tenha certeza absoluta de que poderia explicar o porquê (veja este tópico se quiser dar uma olhada na discussão). Isso deixa o novo usuário louco, mas o truque deve se familiarizar com o usuário mais experiente.
Acabei de verificar com a minha versão favorita do troff, que não é muito conhecida (herança da herança), mas tenho certeza de que ainda funciona da mesma forma com o GNU troff.
fonte