Hi yoahn 개발블로그

[C] 가변인자 본문

프로그래밍 언어/C++

[C] 가변인자

hi._.0seon 2020. 12. 30. 13:56
반응형

C에서 가변인자 함수를 정의하는 방법

void func(int num_args, ...)

# 주의 사항

최소 1개 이상의 고정 인수가 있어야 하며, '...' 은 매개변수 가장 마지막에 위치해야 한다.

 

1. 가변인수를 사용하기 위한 매크로

- va_list

가변인자를 저장하려면 가변 저장공간이 필요하다. va_list 라는 타입이 가변공간의 타입이 된다.

va_list ap;

=> 여러 인수를 저장하는데 쓰일 타입을 선언하는 코드가 된다.

1) void va_start(va_list ap. last);

  : va_list 를 초기화하는 역할

=> va_start를 사용하기 전에 va_list 타입이 이전에 선언되어 있어야 한다.

- va_list (ap) : va_list 타입의 변수인 ap를 초기화

- last            : 첫번째 가변인자 주소를 알려면 고정인수가 필요하기 때문에 받음

ap = va_list의 주소 값 + 고정인수 크기를 더한 위치

2) type va_arg(va_list ap, type);

  : ap 포인터가 위치한 부분의 데이터를 읽어 반환. (읽은 후 ap 포인터를 타입 길이만큼 뒤로 옮기기 때문에 그 다음 값이 이어서 출력될 수 있다)

3) void va_copy(va_list dest, va_list src);

  : 현재 상태의 인수 목록에 대한 복사본을 생성

4) void va_end(va_list ap);

  : va_list 타입을 널로 초기화

 

ref.

jhnyang.tistory.com/293

 

[C,C++] 가변인자 함수의 사용(va_start, va_arg, va_list등등) 함수에 불특정 여러개의 인자를 넘기고 싶

[C, C++ 프로그래밍 강좌 목차] 안녕하세요~ 양햄찌 주인장입니다. 오늘은 오랜만에 프로그래밍 언어에 관련된 포스팅을 들고왔어요. 오늘의 주제 포스팅을 들어가기 전 'C++의 오버로딩'에 대한

jhnyang.tistory.com

docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/va-arg-va-copy-va-end-va-start?view=msvc-160

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C/C++] dangling pointer  (0) 2021.03.18
NULL, 0, '\0', "" 차이점  (0) 2021.03.18
파일 입출력  (0) 2020.03.27
Comments