Saya melihat beberapa kode C ++ dan menemukan konstruksi berikut:
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
Saya mendapatkan peringatan Visual Studio yang mengatakan:
Peringatan Ekspresi bersyarat C4127 adalah konstan.
Visual Studio jelas benar - pasti 'A' didefinisikan sebagai 0x41. Mengapa penulis menulis kode ini, mengingat dua dari tiga cabang adalah kode mati?
#define IS_CHSET_EBCDIC ('A' == 0xc1)
dll.; atau, dalam C ++ modern, jadikan sebagaiconstexpr
.Jawaban:
0xc1
adalahEBCDIC
kode set karakter untukA
. Penulis sedang menguji mesin semacam itu.http://www.ibm.com/support/knowledgecenter/en/SSGH4D_15.1.3/com.ibm.xlf1513.aix.doc/language_ref/asciit.html
sumber
else
cabang terakhir ? Apakah ada pengkodean karakter yang masih digunakan yang tidak kompatibel dengan ASCII maupun EBCDIC?Pada pandangan pertama mungkin terlihat seperti itu adalah kode mati tetapi 'A' == 0x41 tidak selalu akan mengembalikan nilai true ..
apa yang pengembang coba lakukan di sini adalah dengan malas menemukan pengkodean apa yang mesin mengimplementasikan ASCII atau varian EBCDIC
karena @Richard menyarankan Modal a dipetakan ke 0xc1 dalam Kode Pertukaran Desimal Berkode Biner Internasional yang Diperluas lihat tabel di bawah di 2 cabang dari if else ...
nilai lain yang berbeda dapat ditemukan oleh ASCII sebagai contoh:
dia juga bisa melakukan:
if('p' == 0x70) { // ... } else if('p' == 0x97) { //... }
sumber