|
원인은 저의 실수 입니다.
switch~case구문으로 넘겨주는 것을 포인터로 넘겨주는데요
넘겨주는 쪽은 BYTE로 정의되어 있고,
받는 쪽은 char로 정의 되어 있어서 나타났습니다.
김태선 님 고맙습니다.
---------------------------------
모두 즐거운 하루 되세요...
아~자~~!
김태선 님이 쓰신 글 :
: 빌더6에서 테스트 해봤는데
: 이상 없습니다.
:
: void __fastcall TFormMain::FormCreate(TObject *Sender)
: {
: char buf[3] = "\x1\x2\x1";
: char *msg;
: switch (buf[2]){ // buf는 char의 배열입니다.
: case 0x01: // A경우
: msg = "1";
: break;
: case '\x02': // B경우
: msg = "2";
: break;
: default:
: msg = "default";
: break;
: }
: Caption = msg;
: }
:
: 논리적으로나 그 동안의 컴파일 경험으로 봐도
: 0x2 == '\x02' == '\x2'
: 이런 표현은 완전히 같은 것입니다.
:
: 디스어셈블을 해봐도 완전히 같은 결과이므로
: 혹 테스트 환경을 환번 살펴보시고
: 안된다면 테스트하신 빌더 버전과 소스를 위처럼 조금 더 구체적으로
: 제시해 보세요.
:
:
:
: 아~자~~! 님이 쓰신 글 :
: : switch~case 구문을 작성 중에 헥사 표현법에서 이상점이 있어서 질문 드립니다.
: : 예를 들어
: : ///************************************///
: : switch (buf[2]){ // buf는 char의 배열입니다.
: : case 0x01: // A경우
: : break;
: : case '\x02': // B경우
: : break;
: : default:
: : break;
: : }
: : ///*****************************************///
: : 위의 경우 컴파일 에러는 없지만
: : A경우는 인식하지 못하고 default로 갑니다.
: : B경우는 인식하고 해당 구문을 수행합니다.
: :
: : 둘 중에 어느 것이 표준인가요?
: : 또 A와 같이 할 수 있는 방법은 없을까요?
: : 물론 대부분의 고정된 숫자는 define해서 쓰기는 하지만,
: : 지금까지 다른 컴파일러 툴들에서는 이상이 없었는데,
: : 처음 있는 일이라 무척 궁금합니다.
: :
: : --------------------------------------
: : 모두 즐거운 하루 되세요....
: : 아~자~~!
|