Tulis beberapa program (ukurannya tidak masalah), dan letakkan garis yang terlihat tidak berguna, tetapi sebenarnya tidak - jika dihapus, program akan macet, atau melakukan sesuatu yang salah. Jangan ragu untuk menandai baris yang terlihat tidak digunakan oleh komentar, atau sebutkan deskripsi kode Anda, seperti dalam contoh di bawah ini (tentu saja, dalam contoh ini, baris tersebut sebenarnya tidak diperlukan, itu hanya sebuah contoh).
int main(void) {
/* The line below is actually needed. */
2 + 2;
return 0;
}
Karena ini adalah kontes popularitas, solusi dengan jumlah suara terbanyak menang.
popularity-contest
underhanded
Konrad Borowski
sumber
sumber
Jawaban:
C
Tidak akan dikompilasi jika kami menghapus single
;
.EDIT :
Solusi di bawah ini:
sumber
C / C ++
Hanya beberapa kode yang ditulis dengan gaya pengantar / tutorial ...
Tutorial nr. 2 : membaca angka, melakukan operasi matematika, dan mencetak hasilnya.
Menghapus garis
result = 42;
yang pada pandangan pertama terlihat berlebihan, dan, mengingat tujuan yang dinyatakan, benar-benar salah, sebenarnya akan menyebabkan program tidak melakukan apa yang dinyatakan oleh deskripsi.Mengapa?
sumber
>!
bukan hanya>
.>!
hanya menggunakan tidak di setiap baris. Saya pikir mereka tidak muncul untuk saya ketika saya menulisnya. Menariknya, pengurai SE tidak"stdio.h"
perpustakaan lokal dan bukan perpustakaan yang sebenarnya,<stdio.h>
Ruang putih
Sayangnya saya tidak dapat menampilkan program saya di sini karena StackExchange menghapus semua spasi spasi. Hal yang sama berlaku untuk pastebin.com dan pastie.org, jadi saya juga tidak dapat menautkannya.
Tentu saja, seluruh program “terlihat tidak berguna”, tetapi jika Anda menghapus baris apa pun, itu akan melakukan sesuatu yang berbeda.
sumber
JavaScript:
sumber
b
nilaialert(a)
": Jadi, tidak seharusnyab+-
menjadib+=
?b++
ataub--
.b + -2 + 2
. Itu sebabnya jika Anda menghapus baris dengan2 + 2;
, itu dievaluasi untukb + -alert(a);
.C:
Jika Anda menghapus baris
i = i;
maka kode tidak akan berfungsi. Hal ini karena...sumber
APL
Inilah fungsi APL:
Itu melakukan hal yang sama seperti monadik J
i.
:Ini dapat mengambil argumen kiri opsional yang memberikan offset:
Baris
⍺←⎕IO ⋄ ⎕IO←⍺
terlihat tidak berguna ("tetapkan⎕IO
ke⍺
, kemudian tetapkan⍺
ke⎕IO
"), tetapi bagian pertama hanya berjalan jika tidak ada argumen kiri yang diberikan, jadi sebenarnya ia melakukan sesuatu:⍺
diberikan, setel⍺
ke (global)⎕IO
.⎕IO
ke⍺
sumber
C #
Variabel
fibo
harus ditetapkan sebelum Anda dapat menggunakannya di dalam lambda, bahkan jika Anda menugaskan lambdafibo
itu untuk dirinya sendiri. Jika Anda menghapus tugas (yang tampaknya tidak berguna), kesalahan kompiler akan terjadi ("Penggunaan variabel lokal 'fibo'").sumber
Windows Batch:
Atur program berjalan dan modifikasi file ke:
Jika Anda menghapus atau mengubah ukuran komentar, itu akan menyebabkan malapetaka ketika instance pertama dari program tersebut berhenti dan kemudian melanjutkan interpretasi dari byte ke 19 dan seterusnya.
sumber
Jawa
Ini adalah program kerja yang mengambil halaman web dari URL. Anda mungkin terkejut dengan kalimat itu
mengkompilasi bahkan tanpa peringatan. Bahkan, program tidak dapat dikompilasi tanpa itu.
sumber
Rubi
Hal serupa muncul di tempat kerja baru-baru ini - seorang rekan kerja sebenarnya menandai inisialisasi saya yang tampaknya tidak perlu selama peninjauan kode, dan saya benar-benar tergoda untuk memasukkan penjelasan di dalam blok spoiler. Jadi saya akan melakukannya di sini.
Output seperti:
Output dengan baris pertama dari metode dihapus:
sumber
match = Prime.find { |n| n.to_s[regexp] }
Prime.find
kembalin
(mis. 223), danmatch
perlun.to_s[regexp]
(mis. "22"). Jelas saya membuat masalah untuk membuatnya perlu.find
padaPrime
dan bukan array. Pokoknya, masih cukup mudah untuk memperhatikan mengapa garis itu diperlukan ...PHP
Di sini,
\n//This is a comment
perlu. Tanpanya kode tidak akan berjalan.Setidaknya diperlukan
\n
char setelahEOT;
menjalankannya dengan benarsumber
JAVASCRIPT
Tanpa titik koma kemudian
a
akan menjadi apa yang pernah nilai kembali dari fungsi-2 adalah - dalam hal ini ituundefined
. Karena fungsi yang awalnya ditugaskana
akan dieksekusi segera dengan fungsi kedua sebagai argumenb
.sumber
COBOL (IBM Mainframe)
Jika Anda menjalankan program di atas (setiap IBM Mainframe COBOL sejak COBOL II (kompiler IBM pertama hingga standar 1985, mungkin juga COBOL IBM lainnya) hasilnya adalah:
Namun, jika Anda menghapus baris tidak berguna yang tidak berguna "PINDAHKAN RUANG KE W-SAAT DICAMPUR." (bidang memiliki nilai awal ruang, dan memiliki konten lain yang ditempatkan di dalamnya dalam instruksi berikutnya, dan itu bercabang pula) program tidak menghasilkan output dan benar-benar Abends (U4038) (yang berarti crash) dengan pesan berikut :
(kode pesan dan teks akan bervariasi di antara kompiler, offset tergantung pada kompiler yang sebenarnya digunakan dan kompilasi opsi, alamat tergantung di mana program dimuat ketika DIKECUALIKAN).
Alasannya adalah
NEXT SENTENCE
. Ini adalahSecret GO TO
. Compiler memburu full-stop / periode berikutnya dalam sumber, dan menghasilkan cabang dengan instruksi berikut. Dari COBOL II, penggunaan full-stop / menstruasi menjadi santai. Suatu program harus diakhiri dengan periode penuh. Dalam hal ini, cabang tidak aktif pada akhir program.Kedua program mengkompilasi 100% bersih (tidak ada pesan diagnostik, Kode Pengembalian nol).
Perilaku ini adalah "IBM Extension" yang bodoh untuk COBOL. Standar 1985 tidak mengizinkan
NEXT SENTENCE
dalamIF
/END-IF
(CONTINUE
digunakan sebagai gantinya, yang merupakan no-op). IBM mengizinkannya - menyebabkan Gotcha mengerikan dari waktu ke waktu.sumber
sumber
blah
? Di sini dengan OpenBSD 5.5 / amd64 dan sistem gcc, ia tidak pernah segfault, apakah ada atau tidakblah
. Program yang dikompilasi mengalokasikan 16 byte ruang stack dan menyalin nilai 16-bit dari "ok" ke 2 byte pertama. Byte ketiga yang tidak diinisialisasi memiliki '\ 0' secara kebetulan. Jikablah
ada, itu dalam byte ke-16, dan masih belum mengakhiri string.~ - ~!
Ini mungkin yang paling bodoh, paling jelas di sini.
Itu melempar kesalahan tanpa baris kedua, dengan itu mencetak
y
.sumber
~-~!
Windows Batch
Ini adalah file batch yang mencetak angka 1 hingga 10 dengan baris kosong setelah masing-masing:
Ini secara efektif menggunakan peretasan kotor untuk menyimpan baris baru di dalam suatu variabel (penggunaan ekspansi yang tertunda menghilangkan garis NL yang tampak lebih menakutkan dalam jawaban yang ditautkan). Jika Anda menghapus atau mengubah dua baris kosong yang sama sekali tidak berguna di atas komentar, well, itu tidak akan berfungsi.
sumber
troff
Troff adalah sistem pemrosesan teks yang paling indah. Saya menggunakannya untuk dokumen saya. Ini membutuhkan sistem makro agar siap digunakan, dan yang paling terkenal adalah
ms
paket makro. Mari kita mengkompilasi potongan kode berikut dengan-ms
opsi klasik .Baris ketiga tampaknya tidak berguna, dan sebenarnya tidak akan berguna tanpa paket makro. Karena diikuti dua baris di bawah ini dengan posisi vertikal absolut, sepertinya tidak ada artinya untuk mencetak apa pun sebelumnya. Tetapi tanpa karakter yang tidak terlihat ini, posisi vertikal tidak akan berpengaruh, meskipun saya tidak yakin saya bisa menjelaskan mengapa (lihat utas ini jika Anda ingin melihat diskusi). Ini membuat pengguna baru menjadi gila, tetapi triknya akan menjadi biasa bagi pengguna yang lebih bereksperimen.
Hanya memeriksa dengan versi favorit saya troff yang tidak terlalu dikenal (heirloom troff), tapi saya cukup yakin itu masih berfungsi sama dengan GNU troff.
sumber