Я просматривал код C ++ и нашел следующую конструкцию:
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
Я получаю предупреждение Visual Studio :
Предупреждение C4127 Условное выражение является постоянным.
Visual Studio явно права - безусловно, A определяется как 0x41. Почему автор пишет этот код, учитывая, что две из трех веток - мертвый код?
#define IS_CHSET_EBCDIC ('A' == 0xc1)
т.д .; или, в современном C ++, сделайте егоconstexpr
.Ответы:
0xc1
- этоEBCDIC
код набора символов дляA
. Автор тестирует такую машину.http://www.ibm.com/support/knowledgecenter/en/SSGH4D_15.1.3/com.ibm.xlf1513.aix.doc/language_ref/asciit.html
источник
else
ветка? Есть ли еще используемая кодировка символов, совместимая ни с ASCII, ни с EBCDIC?На первый взгляд может показаться, что это мертвый код, но 'A' == 0x41 не всегда вернет истину.
здесь разработчик пытался найти ленивую кодировку, в которой машина реализует ASCII или любой вариант EBCDIC.
как предположил @Richard, Capital a сопоставлен с 0xc1 в международном расширенном двоично-десятичном коде обмена, см. таблицу ниже во второй ветви if else ...
другое другое значение может быть найдено с помощью ASCII, например:
с таким же успехом он мог бы сделать:
if('p' == 0x70) { // ... } else if('p' == 0x97) { //... }
источник