Taking baby-developer steps
22.02.07. printf()관련 공부 - stdarg.h/ va_start, va_arg, va_copy, va_end 본문
22.02.07. printf()관련 공부 - stdarg.h/ va_start, va_arg, va_copy, va_end
Surin Lee 2022. 2. 7. 22:48오늘 목표
- 가변함수 관련 헤더(stdarg.h)내 함수 공부
- va_start
- va_arg
- va_copy
- va_end
오늘 한 일
가변함수 관련 헤더(stdarg.h)내 함수 공부
references:
va_arg() – va_copy() – va_end() – va_start() — 가변 인수 리스트 처리
https://docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/va-arg-va-copy-va-end-va-start?view=msvc-170 / va_arg, va_copy, va_end, va_start
- va_list
-> 함수는 아니지만, 길이가 변할 수 있는 인자(파라미터)들을 저장하려면 가변의 저장 공간이 필요하고, 각 가변 인자의 시작 주소를 가리킬 포인터로 va_list 자료형을 사용한다. 이 자료형은 내부적으로 char *로 정의되어 있다.
- 나머지 함수들
나머지 start, arg, copy, end 각각의 함수를 보면서, 뭔가 리스트를 구현할 때 구현한 함수들이나 각각의 노드에 접근하던 방식과 비슷하다는 느낌을 받았다.
va_start는 va_list로 만들어진 포인터에게 가변인자 중 펏번째 인자의 주소를 가르쳐준다. arg, copy, end에 대한 후속 호출에 대해서 arg_ptr 포인터를 초기화 하는 과정이다.
va_arg()함수는 다른 start, copy, end함수와는 달리 유일하게 반환값이 존재한다. arg함수는 특정 가변인자를 가리키고 있는 va_list의 포인터를 다음 가변인자로 이동시킨다.
va_copy()
제일 설명이 난해하게 느껴져서 이해가 잘 가지 않는 함수 였는데, IBM 페이지에 있던 각 함수의 활용 예시를 보고 나서 좀 감을 잡았다. dest로 들어온 주소(va_list *)에 src에 들어오는 va_list를 첫 주소로 하는 가변인수 목록(list)를 복사 하는것이다.
해당 함수가 호출되었을 때 일어나는 좀더 자세한 사항들은 직접 테스트 해보면서 알아봐야겠다.
va_end()
사용한 가변인자 변수를 끝낼 때 사용하는 함수이다. arg_ptr에 널포인터를 넣어주는 함수인데, 단순하지만 프로그램상 어떠한 경우에도 문제가 생기지 않도록 꼭 써줘야한다.
메모
보통 공부할 땐 노션에 정리를 하는 편이라,
블로그에 올라오는 내용은 노션의 짧은 요약본 정도이다.
'Logs > 학습 log' 카테고리의 다른 글
2022.02.09. ft_printf() - 구현하기 (0) | 2022.02.09 |
---|---|
2022.02.08. ft_printf() - 가변인자 함수 사용 (0) | 2022.02.08 |
2022.02.06. ft_printf 시작 (0) | 2022.02.06 |
2022.02.05. gnl multiple fd 호출 직접 테스트 완료, 동료평가 완료 - 통과! (0) | 2022.02.06 |
2022.02.04. gnl refactoring - 완료! (0) | 2022.02.04 |