예전 자유 게시판

[오탈자 신고] (재미있게 빠져드는) C++ 프로그래밍의 함정(2)

김일영 2006-08-15 19:08

안녕하세요...
어제에 이어 차근차근 진도 나가고 있습니다.
광복절인데 이승엽 홈런 하나 안 쳐주나... 쩌비 아직 소식이 없습니당...

[프로그램 43: 기반이 없어서]의 프로그램 중 class der 이라고만 되어 있는데,
이러면 class base와 상속 관계가 아니므로 문제가 성립이 안되겠음다.
class der : public base 아마 이렇게 해야겠죠.

[프로그램 44: 차례를 지킵시다]에서 '물론 제대로 안 돌아간다.'고 했지만
답에도 나와 있듯이 컴파일러에 따라 제대로 돌아갈 수도 있을 것이구요...
그보다는 (컴파일러에 상관 없이) while 문 내부의 뺄셈이 적어도 array[1]부터 시작할 것이라서
(컴파일러에 따라 1보다 큰 인덱스에서 시작할 수도 있겠지만) array[0]이 계산되지 않는데다가,
계산 도중에 array[12]가 나오게 되는데 array[0]부터 array[11]까지만 존재하고
array[12]는 존재하지 않습니다.

게다가 while (array[i] != 0) 으로 루프를 돌리고 있는데 array의 원소 중 값이 0인 것은 없으니
아예 종료 조건도 없네요~

사실 해답에 제시된 문제보다는 이게 훨씬 더 큰 문제라고 봐야 할텐데...
저자의 결정적인 실수인듯 싶군요~

류광님과의 저의 안면은 괴물이 포름알데히드를 잡숫던 시절 모 델파이 관련 모임에서
함자를 접하고 아 저분이 그분이시구나~ 이렇게 뵈었던게 전부라서 모르실듯...

Professional MTS MSMQ with VB and ASP 잘 보았구요.
역자가 저자를 능가하는 괴력을 보여주신, 명역의 전당에 꼽힐만한 책이라 생각합니다.
(But 정작 전 MTS 관련 프로젝트는 해 보지 못했습니다. 기구한 운명의 희롱 ㅋㅋㅋ)

수고하시고요.
계속해서 눈에 화염병 장착하고 달리겠습니다~


류광 2006-08-16 21:08

보고 고맙습니다. 프로그램 43은 단순한 오타로 보면 되겠지만 프로그램 44는 문제부터 해답까지 전반적으로 고쳐야 할 것 같네요. 해답 26의 경우 i++이 후증가라는 사실과는 맞지 않는 이야기들이 있습니다. 그냥 조언 5만 기억하고 넘어가는 게 속이 편할 것 같습니다-.-

그런데 델파이 관련 모임에 나간 기억이 없는데 이상하네요...(사실 어떤 종류이든 오프모임에는 나간 적이 없습니다...) 혹시 누군가가 저를 사칭한 것이 아닐까요^^ 하이텔 델파이 관련 동호회에서 유령 회원 노릇을 한 적은 있습니다 :)

김일영 2006-08-17 13:08

헐... 낚인 것이었다니... 이럴수가 T.T
정말 황당하군여~

그런데 제가 알기로도 i++은 후증가가 맞습니다.
단지 for loop 등에서 사용될 때 후증가가 끝난 후의 변수의 값을 비교에 사용하기 때문에 구별이 잘 안되는 것 뿐입니다.

혹시나 싶어 직접 아래와 같은 코드를 돌려봤습니다.
int i = 0;
printf("@#$ ++i (%d)\n", ++i);
int j = 0;
printf("@#$ j++ (%d)\n", j++);

각각 1과 0이 나옵니다.