-
[C/C++] 가변인자 (va_start, va_arg, va_list)Note/C C++ 2022. 3. 23. 11:06
https://jhnyang.tistory.com/293
[C,C++] 가변인자 함수의 사용(va_start, va_arg, va_list등등) 함수에 불특정 여러개의 인자를 넘기고 싶
[C, C++ 프로그래밍 강좌 목차] 안녕하세요~ 양햄찌 주인장입니다. 오늘은 오랜만에 프로그래밍 언어에 관련된 포스팅을 들고왔어요. 오늘의 주제 포스팅을 들어가기 전 'C++의 오버로딩'에 대한
jhnyang.tistory.com
1. 가변인자란 함수에 여러개의 파라미터를 받는 문법이다.
1) c/c++ 에서 몇개의 파라미터를 받을지 모르는 경우 사용할 수 있다.
2) 예를 들어 printf("%d %d", a, b) 처럼 여러개의 파라미터를 받을 때 사용한다.
2. #include <stdarg.h> 를 하여 가변인자를 사용할 수 있다.
3. 위 내용을 include 하면 void func(int a, ... ) 처럼 ... 을 파라미터로 사용하면 1개이상의 파라미터를 받을 수 있다. (마치 여러 함수를 오버로딩 한 것처럼)
4. ...로 받은 가변인자를 사용하기 위한 매크로와 자료구조가 stdarg.h에 정의되어 있다.
5. 그 내용은 va_list, va_start, va_arg, va_end. 이다.
1). va_list는 가변인자를 저장하는 구조체이다.
2) va_start는 va_list가 가리켜야할 주소를 지정해준다.
3) va_arg로 가변인자를 가져온다.
4) va_end로 가변인자를 null로 만든다.
6. 예시 코드
1) va_list ap; //가변인자를 가리킬 변수 선언
2) va_start(ap, value); // ap가 value뒤에 따라오는 파라미터를 가리킬 수 있게 끔 초기화한다.
// ...(가변인자) 는 주소값 기준으로 value(고정인수)뒤에 따라 나오게 되며, 해당 주소값을 가리키게 해 준다.
3) va_arg(ap, int) //ap가 가리키는 인자를 반환한다. 타입크기만큼 ap를 주소로 옮겨서 ap가 다음 인자를 가리키게 한다. 다음 va_arg에서는 다음번의 argument를 가져온다.
4) va_end(ap) ; //ap를 null값으로 만든다.
'Note > C C++' 카테고리의 다른 글
해시함수 (자바 hash code 분석) (0) 2022.12.05 [C/C++] 매크로 do while(0), 로그 출력 매크로 (0) 2022.03.23 [C++]free(): double free detected in tcache 2 (0) 2022.03.07 [C++] override와 virtual function (0) 2022.03.05 [C++] 조건문 최적화 (0) 2022.03.05