일부 C ++ 코드를보고 다음 구문을 찾았습니다.
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
다음과 같은 Visual Studio 경고가 표시됩니다.
경고 C4127 조건식이 일정합니다.
Visual Studio가 분명히 옳습니다-확실히 ‘A’는 0x41로 정의됩니다. 세 가지 중 두 가지가 죽은 코드라는 점을 감안할 때 작성자가이 코드를 작성하는 이유는 무엇입니까?
답변
0xc1
에 대한 EBCDIC
문자 세트 코드입니다 A
. 저자는 그러한 기계를 테스트하고 있습니다.
답변
언뜻보기에는 그것이 죽은 코드처럼 보일 수 있지만 ‘A’== 0x41이 항상 true를 반환하지는 않습니다 ..
개발자가 여기서 시도한 것은 ASCII 또는 다른 변형을 구현하는 시스템이 어떤 인코딩인지 느리게 찾는 것 입니다. EBCDIC의
@Richard가 제안했듯이 Capital a 는 International-Extended Binary Coded Decimal Interchange Code의 0xc1 에 매핑됩니다 . if else의 2 분기에서 아래 표를 참조하십시오.
예를 들어 ASCII에서 다른 다른 값을 찾을 수 있습니다.
그는 다음과 같이 할 수있었습니다.
if('p' == 0x70) {
// ...
} else if('p' == 0x97) {
//...
}