Napisz jakiś program (rozmiar nie ma znaczenia) i wstaw linię, która wygląda na bezużyteczną, ale tak naprawdę nie jest - jeśli zostanie usunięta, program się zawiesi lub zrobi coś złego. Możesz zaznaczyć linię, która wygląda nieużywana przez komentarz, lub wspomnieć o swoim opisie kodu, tak jak w przykładzie poniżej (oczywiście w tym przykładzie linia nie jest tak naprawdę potrzebna, to tylko przykład).
int main(void) {
/* The line below is actually needed. */
2 + 2;
return 0;
}
Ponieważ jest to konkurs popularności, rozwiązanie z największą liczbą głosów wygrywa.
popularity-contest
underhanded
Konrad Borowski
źródło
źródło
Odpowiedzi:
do
Nie skompilujemy się, jeśli usuniemy singiel
;
.EDYCJA :
Rozwiązanie poniżej:
źródło
C / C ++
Tylko trochę kodu napisanego w stylu wprowadzenia / samouczka ...
Samouczek nr. 2 : czytanie liczb, wykonywanie na nich operacji matematycznych i drukowanie wyników.
Usunięcie linii,
result = 42;
która na pierwszy rzut oka wydaje się zarówno zbędna, a biorąc pod uwagę podany cel, faktycznie niewłaściwy, spowoduje, że program nie zrobi tego, co stwierdza opis.Czemu?
źródło
>!
zamiast zamiast>
.>!
nie tylko w każdej linii. Myślałem, że nie wyświetlają się dla mnie, gdy je napisałem. Co ciekawe, parser SE nie psuje go :)"stdio.h"
<stdio.h>
Biała przestrzeń
Niestety nie mogę wyświetlić tutaj mojego programu, ponieważ StackExchange usuwa wszystkie końcowe białe znaki. To samo dotyczy pastebin.com i pastie.org, więc nie mogę również link do tego.
Oczywiście cały program „wygląda na bezużyteczny”, ale jeśli usuniesz dowolną linię, zrobi to coś innego.
źródło
JavaScript:
źródło
b
wartościalert(a)
”: A więc nie powinnob+-
byćb+=
?b++
lubb--
.b + -2 + 2
. Dlatego jeśli usuniesz wiersz za pomocą2 + 2;
, zostanie wyświetloneb + -alert(a);
.DO:
Jeśli usuniesz wiersz,
i = i;
kod nie będzie działał. To dlatego, że...źródło
APL
Oto funkcja APL:
To nie to samo, co monadycznego J za
i.
:Może przyjąć opcjonalny lewy argument, który daje przesunięcie:
Linia
⍺←⎕IO ⋄ ⎕IO←⍺
wygląda na bezużyteczną („przypisuj⎕IO
do⍺
, a następnie przypisuj⍺
do⎕IO
”), ale pierwsza część działa tylko wtedy, gdy nie podano lewego argumentu, więc w rzeczywistości coś robi:⍺
podano, ustaw⍺
na (globalny)⎕IO
.⎕IO
na⍺
źródło
DO#
Zmienna
fibo
musi zostać przypisana, zanim będzie można jej użyć wewnątrz lambda, nawet jeśli przypisujesz ją dofibo
siebie. Jeśli usuniesz (pozornie bezużyteczne) przypisanie, wystąpi błąd kompilatora („Korzystanie z nieprzypisanej zmiennej lokalnej„ fibo ””).źródło
Pakiet Windows:
Ustaw działający program i zmodyfikuj plik, aby:
Jeśli usuniesz lub zmienisz rozmiar komentarza, spowoduje to spustoszenie, ponieważ pierwsza instancja programu wstrzymuje się, a następnie kontynuuje tłumaczenie od 19. bajtu.
źródło
Jawa
Jest to działający program, który pobiera stronę internetową z adresu URL. Możesz być zaskoczony, że linia
kompiluje się bez ostrzeżenia. W rzeczywistości program nie skompiluje się bez niego.
źródło
Rubin
Podobna sytuacja pojawiła się ostatnio w pracy - współpracownik faktycznie oznaczył moją, jak się wydaje, niepotrzebną inicjalizację podczas przeglądania kodu, a ja bardzo chciałem umieścić wyjaśnienie w bloku spoilera. Więc zrobię to tutaj.
Dane wyjściowe takie jak:
Dane wyjściowe z usuniętym pierwszym wierszem metody:
źródło
match = Prime.find { |n| n.to_s[regexp] }
Prime.find
zwracan
(np. 223) imatch
musi byćn.to_s[regexp]
(np. „22”). Oczywiście wymyśliłem ten problem, aby było to konieczne.find
naPrime
a nie tablicy. W każdym razie wciąż dość łatwo jest zauważyć, dlaczego ta linia jest potrzebna ...PHP
Tutaj
\n//This is a comment
jest konieczne. Bez tego kod nie uruchomi się.Po prawidłowym uruchomieniu
\n
konieczne jest co najmniej charEOT;
źródło
JAVASCRIPT
Bez średnika
a
stałoby się wtedy jakąkolwiek wartością zwracaną z 2. funkcji - w tym przypadku jestundefined
. Ponieważ funkcja pierwotnie przypisanaa
zostanie wykonana natychmiast z drugą funkcją jako argumentemb
.źródło
COBOL (IBM Mainframe)
Jeśli uruchomisz powyższy program (dowolny COBOL IBM Mainframe od COBOL II (pierwszy kompilator IBM do standardu 1985, prawdopodobnie również inne COBOL IBM), wynikiem będzie:
Jeśli jednak usuniesz potrójnie bezużyteczną linię „PRZENIEŚ MIEJSCE NA W-KIEDY”. (pole ma początkową wartość spacji i ma inną treść umieszczoną w nim w następnej instrukcji, i tak i tak jest rozgałęzione) program nie generuje danych wyjściowych i faktycznie przerywa (U4038) (co oznacza, że się zawiesza) z następującym komunikatem :
(kod i tekst wiadomości różnią się w zależności od kompilatora, przesunięcia zależą od faktycznego użytego kompilatora i opcji kompilacji, adres zależy od tego, gdzie program jest ładowany po wykonaniu EXECuted).
Powodem jest
NEXT SENTENCE
. Jest toSecret GO TO
. Kompilator wyszukuje następny kropkę / kropkę w źródle i generuje gałąź do następującej instrukcji. Od COBOL II korzystanie z kropek / kropek zostało złagodzone. Program musi kończyć się kropką / kropką. W takim przypadku gałąź nie działa na końcu programu.Oba programy kompilują się w 100% czysto (brak komunikatów diagnostycznych, kod powrotu zero).
To zachowanie jest głupim „rozszerzeniem IBM” do języka COBOL. Standard z 1985 r. Nie zezwala na
NEXT SENTENCE
wewnątrzIF
/END-IF
(CONTINUE
zamiast tego stosuje się, co nie jest możliwe). IBM na to pozwolił - od czasu do czasu powodując okropne Gotchas.źródło
źródło
blah
? Tutaj z OpenBSD 5.5 / amd64 i systemowym gcc, nigdy nie segreguje błędów, niezależnie od tego, czyblah
tam jest. Skompilowany program przydziela 16 bajtów miejsca na stosie i kopiuje 16-bitową wartość „ok” do pierwszych 2 bajtów. Niezainicjowany trzeci bajt ma na szczęście „\ 0”. Jeśliblah
tam jest, jest w szesnastym bajcie i wciąż nie kończy łańcucha.~ - ~!
To chyba najgłupszy i najbardziej oczywisty tutaj.
Zgłasza błąd bez tej drugiej linii i drukuje
y
.źródło
~-~!
Pakiet Windows
To jest plik wsadowy, w którym po każdym drukowane są liczby od 1 do 10 z pustą linią:
To skutecznie wykorzystuje brudny hack do przechowywania nowej linii w zmiennej (użycie opóźnionych rozszerzeń pozbywa się bardziej przerażającej linii NL w powiązanej odpowiedzi). Jeśli usuniesz lub w inny sposób zmienisz dwie całkowicie bezużyteczne puste linie nad komentarzem, cóż, to nie zadziała.
źródło
troff
Troff to najwspanialszy system przetwarzania tekstu. Używam go do swoich dokumentów. Wymaga systemu makr, aby być gotowym do użycia, a najbardziej znanym jest
ms
pakiet makr. Skompilujmy następujący fragment kodu z-ms
opcją klasyczną .Trzecia linia wydaje się bezużyteczna i faktycznie byłaby bezużyteczna bez pakietu makr. Ponieważ po dwóch liniach poniżej znajduje się absolutna pionowa pozycja, może wydawać się bez sensu nic przedrukować. Ale bez tego niewidzialnego charakteru pionowe pozycjonowanie nie przyniesie żadnego efektu, chociaż nie jestem absolutnie pewien, czy mógłbym wyjaśnić, dlaczego (zobacz ten wątek, jeśli chcesz rzucić okiem na dyskusję). To powoduje, że nowy użytkownik jest szalony, ale sztuczka powinna się zaznajomić z bardziej eksperymentowanym użytkownikiem.
Właśnie sprawdziłem z moją ulubioną wersją troffa, która nie jest bardzo znana (heirloom troff), ale jestem pewien, że nadal działa tak samo z GNU troff.
źródło