我正在查看一些C++代码并找到以下构造:
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我得到一个Visual Studio警告说:
警告C4127条件表达式是常量.
Visual Studio显然是正确的 - 当然'A'被定义为0x41.为什么作者编写这段代码,因为三个分支中有两个是死代码?
Ric*_*ges 116
0xc1
是的EBCDIC
字符集代码A
.作者正在测试这样一台机器.
ΦXo*_*a ツ 11
乍一看可能看起来像是死代码,但'A'== 0x41并不总是会返回true ..
开发人员试图在这里做的是懒洋洋地找到机器实现ASCII或EBCDIC的任何变体的编码
正如@Richard所建议的那样,资本a被映射到国际 - 扩展二进制编码的十进制交换代码中的0xc1, 参见if else的2分支中的下表...
ASCII可以为exmaple找到另一个不同的值:
他也可以做到:
if('p' == 0x70) {
// ...
} else if('p' == 0x97) {
//...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7253 次 |
最近记录: |