Tulis sebuah program yang akan menghasilkan perilaku yang berbeda pada sebanyak mungkin platform yang berbeda. Setiap platform yang berbeda memberikan satu poin (termasuk platform awal, yang berarti Anda tidak bisa mendapat skor kurang dari 1 *). Mekanisme yang dimaksudkan untuk menentukan target / menjalankan platform (mis. Melalui pernyataan kompilasi platform atau API seperti .NET's Environment.OSVersion.Platform) tidak boleh digunakan. Jawaban dengan skor tertinggi menang (di mana upvote adalah tiebreak).
Sebagai contoh, perhatikan program berikut dalam bahasa Blub: print (1+2)
. Jika program ini mencetak 3
pada setiap platform yang dikompilasi dan dijalankannya, nilainya akan menjadi 1. Namun, jika, karena alasan apa pun, itu akan dicetak 4
pada PDP-11, nilainya adalah 2. Dll. Tetapi berikut ini C potongan, misalnya, adalah entri yang tidak valid: #ifdef WIN32 ... #endif
.
Definisi / perincian:
Platform yang berbeda: kombinasi a) arsitektur perangkat keras b) OS dan nomor versi MAJOR-nya (mis. 1.0.0 dan 1.1.0 dianggap sebagai OS yang sama)
Perilaku yang berbeda: dua perilaku adalah sama jika mereka menghasilkan efek samping yang sama (misalnya membuat file yang sama dengan konten yang sama), atau jika efek sampingnya adalah kesalahan dari jenis yang sama. Sebagai contoh, jika suatu program segfault pada dua platform yang berbeda, tetapi pesan segfault berbeda pada platform ini, ini masih dianggap perilaku yang sama; sementara program yang menghasilkan kesalahan nol-divisi pada satu platform dan stack overflow (lihat apa yang saya lakukan di sana?;) kesalahan pada yang lain menghasilkan perilaku yang berbeda.
Semua perilaku tidak terdefinisi dianggap setara.
Program harus dijalankan dengan cara yang setara pada semua platform (namun; ini berarti Anda dapat melewati parameter baris perintah jika diinginkan)
* Ya, saya kira Anda akan mendapat skor nol jika program Anda berjalan pada platform nol. Tapi um ... Ya tidak pernah.
sumber
1
pada Windows dan2
OSX, dengan detail yang saya jalankan sebagai skrip Python pada Windows dan program C pada OSX?Jawaban:
C
Saya akan menikamnya dengan contoh seperti buku teks:
Cetakan Platform 64-bit: foo
Cetakan Platform 32-bit: bilah
Platform Little Endian: 67305985
Platform Big Endian: 16909060
Jadi setidaknya ada 4 kombinasi.
Selain itu, beberapa platform yang sangat lama telah
int
didefinisikan sebagai 16-bit. Dan beberapa platform telahlong
didefinisikan sebagai 64-bit. Jadi hasilnya akan berbeda juga.C sudah cukup spesifik untuk platform, jika Anda menggali cukup dalam. Tidak sulit menghasilkan ribuan kombinasi (2 ^ 10+).
sumber
\n
vs\n\r
pada * nix dan windows?printf("\n");
tidak output\r\n
pada windows (mengarahkan stdout ke file di windows menghasilkan file 2 byte).Perakitan x86 / x64 16/32/64-bit, 16 byte, 4 kombinasi
Kode byte:
Pembongkaran (16-bit):
Pembongkaran (32-bit):
Pembongkaran (64-bit):
Ia mengembalikan:
- CX = 0000 dalam mode 16-bit;
- ECX = 10000 dalam mode non-virtual 32-bit;
- ECX = (acak) dalam mode virtual 32-bit;
- RCX = FFFFFFFFFFFFFFFFFF dalam mode 64-bit.
sumber