commit 2025-09-04 00:16 edit a bit ZCppMain/ZMainHead.H

This commit is contained in:
2025-09-04 00:16:43 +09:00
parent dfaf5a587f
commit 7848f3c8bb

View File

@ -5490,6 +5490,34 @@ namespace ZNsCPP */
-- 2013-06-23 19:34:00
■ 'char 의 int 확장에 따른 문제의 코드'
아래 함수에서
int ZtCMainChars<>::Minus(TypeCharC*, TypeCharC*, TypeLength, TypeLength)
return 문을
return VC_Minus; // VC_Minus 는 *(VP_Left-1)-*(VP_Right-1)
에서
return int(*(VP_Left-1))-int(*(VP_Right-1));
로 고쳤다. 컴파일러에 따라, 음수 char 을 int 로 확장하면 양수(+)가 될 수 있는 것이다. 이
것을 언제 알았냐면, LG CNS 에서 충전기 프로젝트를 할 때다. 그때 ELDK 4.0 tool chain 의
컴파일러를 사용했는데, NsUtility::CLoadSimUrlConfig_T<> 으로 설정 파일을 읽어들일 때, 자
꾸 몇몇 설정값을 인식하지 못하고 있었다. CLoadSimUrlConfig_T<> 은 ns1.cppschool.com 과
ns2.cppschool.com 에서 테스트된 클래스이다. 그런데도 이런 문제가 발생한 것이다. 이전에
Hemose 의 메신저 서버를 만들 때에도 이런 문제가 있었는데, 풀리지 않을 것 같은 문제로 여
기고 매우 긴장하고 있었다. CObjAVL.H 파일의 AddKey() 함수의 비교하는 부분에 cout 으로
출력해 보니까, 항상 '>' 조건이 아닌가. 그래서 ZtCMainChars<>::Minus() 함수까지 파들어가
리턴하는 값을 보니까 항상 양수였다! 이럴수가, 왼쪽이 작으면 음수를 리턴해야 한다. 그런
데 항상 양수라니. 좀 더 조사해 보니까, 해당 컴파일러의, char 의 int 형 확장에 따른 문제
였고 코드를 위처럼 고치게 되었다.
-- 2011-12-29 17:35:00
■ g++ 에서 아래가 컴파일이 안 된다.