我正在查看一些C ++代码并找到以下构造:
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
我收到Visual Studio警告说:
警告C4127条件表达式是常量。
Visual Studio显然是正确的 - 当然' A'被定义为0x41。为什么作者编写这段代码,因为三个分支中有两个是死代码?
答案 0 :(得分:116)
EBCDIC
是A
的{{1}}字符集代码。作者正在测试这样一台机器。
答案 1 :(得分:11)
乍一看可能看起来像死信,但'A'== 0x41并不总是会返回true ..
开发人员试图在这里做的是 lazily 找到实现 ASCII 的机器或 EBCDIC
的任何变体的编码正如@Richard所建议的那样, a 映射到International - Extended Binary Coded Decimal Interchange Code中的 0xc1 ,参见下面if if else的2分支......
ASCII可以为exmaple找到另一个不同的值:
他也可以做到:if('p' == 0x70) {
// ...
} else if('p' == 0x97) {
//...
}