• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Ellipsis 강의 중 코드 동작 과정에 대해 질문이 있습니다.

23.01.08 21:21 작성 조회수 178

0

 

 

 

교수님께서 작성하신 코드의 동작 원리가 궁금해서 디버깅으로 하나하나 파악하고 있는데, va_start 매크로 실행부분에서 list에 1 "x1"이라고 첫번째 가변인수가 저장되있더라구요? 그리고 for문 시작부분에서 arg=0 일 때, va_arg 매크로가 동작하면서 list에 2 "x2"라고 이미 접근해 있습니다. 그 다음에는 첫번째 가변인수를 저장한 1이 sum에 저장되구요.

제가 궁금한 것은,

  1. 매크로가 for문보다 빨리 동작되는 건가요?

  2. arg < 3 까지 계속 증가하면서 sum을 업데이트해주니 findAverage(3, 1, 2, 3)에서 생략된 가변 인수를 배열처럼 인덱스로 생각해도 되나요? 이를테면 1을 [0], 2를 [1], 3을 [2]로 말이죠

  3. findAverage(10, 1, 2, 3, 4, 5)가 지수함수가 포함되서 나오는 이유는 가변인수에 없는 쓰레기 값을 계속해서 sum에 더해서 그렇게 나오는 건가요?

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2023.01.10

  1. 네 그렇습니다. 매크로는 컴파일 이전에 대체됩니다.

  2. 인덱스처럼 생각한다는 것이 순서대로 대입하는 것처럼 생각해도 되냐는 의미와 같다면 그렇습니다.

  3. 쓰레기값이 값에 포함되어있는 것이 아닌가 싶습니다. 아래와 같이 실행할 때마다 결과가 달라지는 것을 볼 수 있습니다.

    $ g++ test.cc
    $ ./a.out
    1.96297e+08
    $ ./a.out
    1.92114e+08
    $ ./a.out
    1.91175e+08
    $ ./a.out
    1.95378e+08
Ambition님의 프로필

Ambition

질문자

2023.01.10

답변해주셔서 감사합니다 !