我正在查看一些C ++代码,发现以下结构:
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
我收到Visual Studio警告,说:
警告C4127条件表达式恒定。
Visual Studio显然是正确的-肯定将“ A”定义为0x41。鉴于三个分支中有两个是无效代码,为什么作者要编写此代码?
我正在查看一些C ++代码,发现以下结构:
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
我收到Visual Studio警告,说:
警告C4127条件表达式恒定。
Visual Studio显然是正确的-肯定将“ A”定义为0x41。鉴于三个分支中有两个是无效代码,为什么作者要编写此代码?
#define IS_CHSET_EBCDIC ('A' == 0xc1)
以此类推;或者,在现代C ++中,将其设为constexpr
。
Answers:
0xc1
是的EBCDIC
字符集代码A
。作者正在测试这种机器。
else
分支是做什么的呢?是否仍在使用与ASCII或EBCDIC都不兼容的字符编码?
乍一看可能看起来像是死代码,但“ A” == 0x41并非总是会返回true。
开发人员试图在这里懒惰地发现实现ASCII或EBCDIC的任何变体的机器是什么编码
正如@Richard建议的那样,大写字母a已映射到国际-扩展二进制编码的十进制交换码中的0xc1, 请参见if if else的2分支中的下表...
ASCII可以找到另一个不同的值,例如:
他也可以做到:
if('p' == 0x70) {
// ...
} else if('p' == 0x97) {
//...
}