Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[4976] Re:제가 책의 예문보고 코딩을 해봤는데...
[] 1485 읽음    2005-03-28 00:47
푸른여우 님이 쓰신 글 :
: 제가 어제부터 C언어 공부를 시작했습니다..
:
: 늦게나마 관심이 생겨서요..^^
:
: 책에 있는 코딩을 그대로 따라하고 출력문이 나왔는데
:
: 에러는 없는데 이게 이상해서요..
:
: 다음은 코딩한거요..(책이랑 동일)
:
: #include <stdio.h>
:
: main()
:
: {
:
:    int a=10, b=20, c=30, d=40;
:
:    printf("a is %d b is %d c is %d d is %d\n",a,b,c,d);
:
:    printf("a is %d b is %d c is %d d is %d\n",a,b,c,);
:
:    printf("a is %d b is %d c is %d \n",a,b,c,d);
:
:    printf("current directory is c:\\lang\\turboc\n");
:
: }
:
: 다음은 이렇게 코딩했을때 나오는 출력문..(책에 표시된것임)
:
: a is 10 b is 20 c is 30 d is 40
:
: a is 10 b is 20 c is 30 d is 56340
:
: a is 10 b is 20 c is 30
:
: current directory is c:\lang\turboc
:
: 다음은 제가 코딩한것 출력문
:
: a is 10 b is 20 c is 30 d is 40
:
: a is 10 b is 20 c is 30 d is 1340
:
: a is 10 b is 20 c is 30
:
: current directory is c:\\lang\\turboc
:
: 위에서 보셨다싶이 출력문이 다릅니다. 이 예문의 목적이 인수의 갯수만큼 %변환문자도 동일한 갯수가 있어야 한다인데..
:
: 그럼 두번째줄의 출력문 숫자가 다르게 나온것은 단순한 에러라고 보면 되는지요?
:
: 그리고 첫째줄이 올바른것이고 밑에 두줄이 틀린거라면 마지막줄의 a,b,c가 제대로 출력되는 이유는 무엇인지 궁금합니다..
:
: 답변 정말 부탁드립니다!!
: 메일로 답변주심 넘넘 감사하겠습니다!
: 이게 어려운데 쫌 재미있어서..ㅎㅎ
: 그리고 형편상 학원은 갈수없어서 그런데 독학하는 방법도 좀 가르쳐 주시면 감사하겠습니다!m(__)m

원리에 대한 것은 이제 시작하신 분에게는 상당히 복잡해서 좀 그렇군요.
일단 책에서 권장하는 바 대로 하는 게 좋습니다만 설명을 곁드리자면 아래와 같습니다.
int printf(const char *format,  ...);
printf의 형 선언은 위와 같습니다.
두번째 매개변수 자리의 ...는 인수가 몇 개든 상관이 없다는 것입니다.
피호출 함수(printf) 내부에서 format에서 필요로 하는 인수들을 스택에서 꺼내 쓰게 됩니다.

1. 포맷에 지정된 것보다 실제 지정한 인수가 많을 경우에는 초과하는 것들은 단순히 무시되기 때문에 별 문제는 없습니다.
2. 1의 반대의 상황이 문제인데요, 모자란 것들은 모자라다는 것조차도 모른 채 계속 스택에서 꺼내 쓰게 됩니다.
    이 경우는 바람직하지 않으므로 지양해야 합니다.
위의 예에서는 모르긴 해도 인수를 지정해주지 않은 d에 대한 값은 그대로 실제 d의 값(40)이 나오지 않을까 생각해봅니다.
main 함수의 시작부분에서 자동 변수들을 선언/정의하는데 그 것들은 스택에 생성이 됩니다. d가 가장 나중에 스택에 자리 잡고 그 위치는 스택의 가장 윗부분입니다. 따라서, 두번째 printf에서 모자란 인수 하나는 이 d의 메모리에 위치하는 것으로 계산이 됩니다.

+ -

관련 글 리스트
4974 제가 책의 예문보고 코딩을 해봤는데... 푸른여우 1450 2005/03/27
4977     Re:제가 책의 예문보고 코딩을 해봤는데... 태즈 1465 2005/03/28
4976     Re:제가 책의 예문보고 코딩을 해봤는데... 1485 2005/03/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.