-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
Ellipsis 강의 중 코드 동작 과정에 대해 질문이 있습니다.
23.01.08 21:21 작성 조회수 178
0
교수님께서 작성하신 코드의 동작 원리가 궁금해서 디버깅으로 하나하나 파악하고 있는데, va_start 매크로 실행부분에서 list에 1 "x1"이라고 첫번째 가변인수가 저장되있더라구요? 그리고 for문 시작부분에서 arg=0 일 때, va_arg 매크로가 동작하면서 list에 2 "x2"라고 이미 접근해 있습니다. 그 다음에는 첫번째 가변인수를 저장한 1이 sum에 저장되구요.
제가 궁금한 것은,
매크로가 for문보다 빨리 동작되는 건가요?
arg < 3 까지 계속 증가하면서 sum을 업데이트해주니 findAverage(3, 1, 2, 3)에서 생략된 가변 인수를 배열처럼 인덱스로 생각해도 되나요? 이를테면 1을 [0], 2를 [1], 3을 [2]로 말이죠
findAverage(10, 1, 2, 3, 4, 5)가 지수함수가 포함되서 나오는 이유는 가변인수에 없는 쓰레기 값을 계속해서 sum에 더해서 그렇게 나오는 건가요?
답변을 작성해보세요.
0
강민철
2023.01.10
네 그렇습니다. 매크로는 컴파일 이전에 대체됩니다.
인덱스처럼 생각한다는 것이 순서대로 대입하는 것처럼 생각해도 되냐는 의미와 같다면 그렇습니다.
쓰레기값이 값에 포함되어있는 것이 아닌가 싶습니다. 아래와 같이 실행할 때마다 결과가 달라지는 것을 볼 수 있습니다.
$ g++ test.cc $ ./a.out 1.96297e+08 $ ./a.out 1.92114e+08 $ ./a.out 1.91175e+08 $ ./a.out 1.95378e+08
답변 1