Apa kode C ++ terpendek yang terbentuk dengan baik yang menunjukkan perilaku tidak terdefinisi?
code-challenge
c++
Luchian Grigore
sumber
sumber
Jawaban:
Sunting: ini bisa didiagnosis, jadi bukan UB.
Berikut
^L
ini adalah karakter umpan formulir, yang merupakan bagian dari rangkaian karakter dasar. 4 karakter (baris baru tidak diperlukan per 2.2: 2). Perilaku tidak terdefinisi adalah persumber
Ini memiliki delapan karakter, dan memiliki perilaku yang tidak terdefinisi, menurut §2.2 / 1.
sumber
main
.main
. Sulit untuk menegakkan aturan ketika Anda meminta sebuah program yang tidak memiliki aturan untuk diikuti (itulah yang dimaksud UB!).main
, apa yang Anda miliki adalah bentukan.§16.2 / 4:
sumber
Penjelasan:
C ++ 98 dan C ++ 11 §5.8 / 1 keduanya menyatakan itu
sumber
int
biasanya 32? mengubah RHS dari pergeseran ke-1
adalah jumlah karakter yang sama dan tidak akan bergantung pada ukuran bilangan bulatJika seseorang mempercayai wikipedia, berikut adalah beberapa:
Mengubah string dikatakan menyebabkan perilaku yang tidak terdefinisi. Itu selalu berhasil untuk saya.
Fungsi yang tidak batal tanpa pengembalian menyebabkan nilai pengembalian yang tidak ditentukan.
Pembagian (int?) Dengan nol seharusnya tidak ditentukan. Yang saya tahu adalah crash.
sumber
int main(){}
paling tidak.char **
tidakchar *
. Anda hanya memodifikasi bagian dari nilai pointer. Bahkan,argv
dijamin aman dimodifikasi.char *argv[]
tidak memilikiconst
kualifikasi. Anda dapat menabrak dengan menulis ke string literal denganint main(){char *v="";*v=1;}
sumber