C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[20293] 간단한 연산식 코드에서 있었던 황당한 사고
박지훈.임프 [cbuilder] 4278 읽음    2011-10-25 02:19
어제 저녁에 있었던 소소한 코딩 사고 얘기입니다. 작업했던 코드 중에 아래와 같은 간단한 연산식이 있었습니다. 제가 직접 만든 식은 아니고 거래처에서 받은 금융 쪽의 간단한 인터폴레이션 식입니다.
result := prc_1 + (prc_2 – prc_1) * (val_dt - val_dt1) / (val_dt2-val_dt1);


보다시피 델파이 코드입니다만, 뭐 C++ 등 다른 언어를 사용하는 분이라도 금방 알아볼 간단한 연산식이죠. 여기에 사용된 prc_1, prc_2는 double 타입 변수이고 적절한 값이 들어가 있습니다. 그리고 val_dt1과 val_dt2는 날짜인데, 내부적으론 좀 다릅니다만 여기선 그냥 integer 타입이라고 봐도 됩니다.

여기서 에러가 날 거라고는 상상하지도 못했는데, 실제로 컴파일을 했을 때 다음과 같은 에러 메시지를 만나게 되었습니다.
E2029 ')' expected but identifier '–' found

이 수식을 이리 보고 저리 보고 돌려보고 뒤집어보기도 해도 도무지 감도 못잡겠더군요. 거의 한시간 가까이 이 한줄과 씨름을 했습니다. 아무리 봐도 에러가 발생할 수식이 아닌데 말이죠.

이게 왜 발생한 건지 금방 감이 오시는 분 있으신가요? 물론 겪어보신 분이라면 감이 오실 수 있겠습니다만, 흔히 발생할 사고가 아니어서 겪어보신 분이 많지 않을 것 같습니다.

한시간이나 걸려서 찾아낸 그 황당한 원인은, prc_2 - prc_1 부분에서 가운데의 마이너스(-) 기호였습니다. 사실은 마이너스가 아니었던 거죠. 워드로 작성된 문서에서 복사해온 코드였는데 가운데의 마이너스가 실제 아스키의 마이너스 키가 아니라 마이너스와 비슷하게 생긴 확장 한글 코드에 있는 글자였던 겁니다.

만약 워드에서 복사하기 전에 잘 살펴봤더라면 발견할 수도 있었던 것이, 워드에선 잘 보면 일반적인 마이너스보다 이 글자는 좀 더 길어보이게 되어 있습니다. 그런데, 델파이 IDE로 일단 복사해놓고 나면 보통의 마이너스 글자와 동일한 폭으로 나타나서 전혀 구별이 안됩니다. 델파이 IDE의 기본 폰트인 Courier New 폰트 탓인 듯 한데요.

제가 이게 보통의 마이너스 글자가 아니라는 걸 알아챈 건 한시간이나 끙끙대다 결국 해당 코드를 헥사에디터로 살펴본 후였습니다. 그러지 않았다면 결코 이 에러의 원인을 알아내지 못했을 것 같습니다.

사소하고 황당한 일이긴 하지만, 저처럼 갑자기 당하고 나면 원인이 뭔지 쉽게 파악하기 어려울 것 같아 공유해봅니다. 코딩 일상다반사라고나 할까요. ㅎㅎ
태기, 클라인 [whtjdxor]   2011-10-25 12:16 X
ㅎㅎ 저런 황당한 사고?를 경험한 적은 없는데요..ㅎ
좋은 경험 공유 감사드립니다. ^^
장성호 [nasilso]   2011-10-25 12:45 X
ㅋㅋ 고생하셨네요


좀 다른경우이지만..

눈 씻고 봐도 코드에 문제가 없는것 같은데 에러가 나는 경우를 저는 종종 격습니다.



원인은 아래 글에 있습니다.

"캠릿브지 대학의 연결구과에 따르면, 한 단어 안에서 글자가 어떤 순서로 배되열어
있는가 하것는은 중하요지 않고, 첫째번와 마지막 글자가 올바른 위치에 있것는이
중하요다고 한다. 나머지 글들자은 완전히 엉진창망의 순서로 되어 있지을라도
당신은 아무 문없제이 이것을 읽을 수 있다. 왜하냐면 인간의 두뇌는 모든 글자를
하나 하나 읽것는이 아니라 단어 하나를 전체로 인하식기 때이문다."



저는 코드에서 철자 하나 순서 뒤바뀐것 때문에
한참 해매는 경우가 왕왕 있곤 하는데요

위 글과 같이 코드를 볼때
charactor를 보는것이 아니라 word를 보게 되기 때문이죠
박영목.월천 [gsbsoft]   2011-10-25 22:43 X
요즘 후배님들 헥사에디터 안 사용하시는 분들 제법 있음... 꼭 사용하시길... 추천
Lyn [tohnokanna]   2011-10-26 21:57 X
E2029 ')' expected but identifier '–' found  보고 대충 감 잡을 수 있지 않을까요 ....

- 는 identifier 가 될 수 없으니까 ;

+ -

관련 글 리스트
20293 간단한 연산식 코드에서 있었던 황당한 사고 박지훈.임프 4278 2011/10/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.