팀원들과 디버깅 간, 함수의 인자 입출력 순서에 대해 신기한 점을 발견해서 기록하고자 한다.
사진 자료는 팀원의 블로그에서 얻었다. (감사합니다.)
위의 그림과 같이, function() 함수가 있다고 하자.
function(1, 2, 3)에서 매개변수 1, 2, 3은 User Stack 영역에서 3→2→1 순으로 저장이 된다. (스택은 큰 주소에서 작은 주소로 내려가면서 저장되므로)
디버깅을 하던 중, 바로 printf() 함수를 활용해서 확인해 볼 수가 있었다.
while(save_ptr != NULL){
save_ptr = strtok_r(NULL, " ", &next_ptr);
save_arg[token_cnt-1] = save_ptr;
printf("save_ptr : %s, %d\n", save_ptr, token_cnt);
printf("........ : %s, %d\n", save_arg[token_cnt-1], token_cnt++);
}
while(save_ptr != NULL){
save_ptr = strtok_r(NULL, " ", &next_ptr);
save_arg[token_cnt-1] = save_ptr;
printf("save_ptr : %s, %d\n", save_ptr, token_cnt);
printf("........ : %s, %d\n", save_arg[token_cnt-1], token_cnt);
token_cnt++;
}
위의 두 비교를 보면, 다른 값이 나온다.
주목할 부분은 1번 case의 2번째 printf()함수로, token_cnt 인자가 가장 마지막에 나오지만 User stack에는 save_arg[token_cnt-1]보다 먼저 저장된다.
따라서 출력 2번째 줄(검정 화면)의 결과 값이 1,2번 case가 다르게 나오는 것이다.
앞으로 유의하면서 프로그래밍을 하자~!