Напишите какую-нибудь программу (размер не имеет значения) и поместите строку, которая выглядит бесполезной, но на самом деле это не так - если она будет удалена, программа потерпит крах или сделает что-то не так. Не стесняйтесь пометить строку, которая выглядит неиспользуемой комментарием, или упомянуть ее описание кода, как в примере ниже (конечно, в этом примере строка на самом деле не нужна, это всего лишь пример).
int main(void) {
/* The line below is actually needed. */
2 + 2;
return 0;
}
Поскольку это конкурс популярности, решение с наибольшим количеством голосов выигрывает.
popularity-contest
underhanded
Конрад Боровски
источник
источник
Ответы:
С
Не скомпилируется, если мы удалим сингл
;
.РЕДАКТИРОВАТЬ :
Решение ниже:
источник
C / C ++
Просто некоторый код, написанный в стиле введения / учебника ...
Учебное пособие №. 2 : чтение чисел, выполнение математических операций над ними и печать результатов.
Удаление строки,
result = 42;
которая на первый взгляд выглядит излишней и, с учетом заявленной цели, фактически неверной, фактически приведет к тому, что программа не будет выполнять то, что говорится в описании.Зачем?
источник
>!
вместо>
.>!
только не в каждой строке. Я думаю, что они не отображаются для меня, как я их написал. Интересно, что парсер SE это не портит :)"stdio.h"
вместо фактического включения библиотеки,<stdio.h>
Пробелы
К сожалению, я не могу показать свою программу здесь, потому что StackExchange удаляет все конечные пробелы. То же самое относится и к pastebin.com и pastie.org, поэтому я не могу ссылаться на них.
Конечно, вся программа «выглядит бесполезной», но если вы удалите какую-либо строку, она сделает что-то другое.
источник
JavaScript:
источник
b
ценностьalert(a)
»: так не должноb+-
бытьb+=
?b++
илиb--
.b + -2 + 2
. Вот почему, если вы удалите строку с2 + 2;
, она оценивается какb + -alert(a);
.C:
Если вы удалите строку,
i = i;
то код не будет работать. Это потому что...источник
APL
Вот функция APL:
Он делает то же самое, что и монадический J
i.
:Может принимать необязательный левый аргумент, который дает смещение:
Линия
⍺←⎕IO ⋄ ⎕IO←⍺
выглядит бесполезным ( «Присвоить⎕IO
к⍺
, а затем назначить⍺
на⎕IO
»), но первая часть работает только если не левый аргумент не задан, поэтому на самом деле это что - то сделать:⍺
, установите⍺
в (глобальный)⎕IO
.⎕IO
на⍺
источник
C #
Переменная
fibo
должна быть назначена до того, как вы сможете использовать ее внутри лямбды, даже если вы назначаете эту лямбдуfibo
себе. Если вы удалите (казалось бы, бесполезное) назначение, произойдет ошибка компилятора («Использование неназначенной локальной переменной« fibo »»).источник
Пакет Windows:
Установите работающую программу и измените файл на:
Если вы удалите или измените размер комментария, это вызовет хаос, поскольку 1-й экземпляр программы приостанавливается, а затем продолжает интерпретацию с 19-го байта и далее.
источник
Джава
Это рабочая программа, которая извлекает веб-страницу из URL. Вы можете быть удивлены, что линия
компилируется даже без предупреждения. На самом деле, программа не компилируется без него.
источник
Рубин
Недавно на работе возникла похожая вещь - коллега на самом деле пометил мою, казалось бы, ненужную инициализацию во время проверки кода, и я действительно испытал искушение поместить объяснение в блок спойлера. Так что я сделаю это здесь.
Выведите как есть:
Вывод с удаленной первой строкой метода:
источник
match = Prime.find { |n| n.to_s[regexp] }
Prime.find
возвращаетn
(например, 223), иmatch
должно бытьn.to_s[regexp]
(например, "22"). Очевидно, я придумал проблему, чтобы сделать это необходимым.find
наPrime
и не массив. Во всяком случае, все еще довольно легко заметить, зачем нужна эта линия ...PHP
Здесь
\n//This is a comment
необходимо. Без этого код не будет работать.По крайней мере,
\n
символ необходим после того,EOT;
как запустить его правильноисточник
JAVASCRIPT
Без точки с запятой тогда
a
стало бы то, что когда-либо возвращаемое значение из 2-й функции - в этом случае этоundefined
. Потому что функция, изначально назначенная для,a
будет сразу же выполняться со второй функцией в качестве аргументаb
.источник
COBOL (мэйнфрейм IBM)
Если вы запустите вышеупомянутую программу (любой COBOL IBM Mainframe начиная с COBOL II (первый компилятор IBM по стандарту 1985 года, возможно, также другие IBM COBOL), то вы получите:
Однако, если вы удалите бесполезную строку «ПЕРЕМЕСТИТЬ ПРОСТРАНСТВО В W-КОГДА-СОБИРАЕТСЯ». (поле имеет начальное значение пробела и содержит другое содержимое, помещенное в него в следующей инструкции, и оно в любом случае разветвляется) программа не выдает никаких данных и фактически завершает работу (U4038) (что означает, что происходит сбой) со следующим сообщением :
(код сообщения и текст могут отличаться у разных компиляторов, смещения зависят от фактического используемого компилятора и параметров компиляции, адрес зависит от того, куда загружается программа при выполнении EXECuted).
Причина в том
NEXT SENTENCE
. ЭтоSecret GO TO
. Компилятор выслеживает следующий полный останов / период в источнике и генерирует ветвь для следующей инструкции. Начиная с COBOL II, использование полных остановок / периодов было смягчено. Программа должна заканчиваться полным остановом / периодом. В этом случае ветка находится вне конца программы.Обе программы компилируются на 100% чисто (без диагностических сообщений, код возврата ноль).
Такое поведение является глупым «расширением IBM» для COBOL. 1985 Стандарт не допускает
NEXT SENTENCE
вIF
/END-IF
(CONTINUE
используется вместо этого, который является не-ор). IBM позволила это - время от времени вызывая ужасные ошибки.источник
источник
blah
? Здесь, с OpenBSD 5.5 / amd64 и системой gcc, он никогда не пересекается, независимо от того, существует он илиblah
нет. Скомпилированная программа выделяет 16 байтов стекового пространства и копирует 16-битное значение «ok» в первые 2 байта. 3-й байт неинициализирован по счастливой случайности. Еслиblah
он есть, он находится в 16-м байте и до сих пор не завершает строку.~ - ~!
Это, пожалуй, самый глупый, самый очевидный здесь.
Выдает ошибку без этой второй строки, с которой он печатает
y
.источник
~-~!
Пакет Windows
Это командный файл, который печатает числа от 1 до 10 с пустой строкой после каждого:
Это эффективно использует грязный хак для хранения новой строки внутри переменной (использование отложенных расширений избавляет от более страшной строки NL в связанном ответе). Если вы удалите или иным образом измените две совершенно бесполезные пустые строки над комментарием, это не сработает.
источник
TROFF
Troff - самая замечательная система обработки текста. Я использую это для своих документов. Для того, чтобы быть готовым к использованию, требуется система макросов, а самым известным является
ms
пакет макросов. Давайте скомпилируем следующий фрагмент кода с классическим-ms
вариантом.Третья строка кажется бесполезной и фактически будет бесполезной без макропакета. Поскольку за ним следуют две строки ниже абсолютного вертикального позиционирования, печатать раньше ничего не могло бы показаться бессмысленным. Но без этого невидимого персонажа вертикальное позиционирование не будет иметь никакого эффекта, хотя я не совсем уверен, что смогу объяснить почему (см. Эту ветку, если вы хотите взглянуть на обсуждение). Это сводит нового пользователя с ума, но тогда хитрость должна стать знакомой более опытному пользователю.
Только что проверил мою любимую версию troff, которая не очень известна (семейная реликвия), но я почти уверен, что она работает так же и с GNU troff.
источник