본문 바로가기
컴퓨터/C

[C언어] 가변인자함수

by Luyin 2013. 2. 18.



1. 가변 인자함수

함수의 전닮값(파라미터)(인수) 의 개수가 정해져 있지 않은 함수다.

ex) printf, scanf


2. 가변 인수

인수의 개수와 타입이 정해져 있지 않은 인수


3. 가변인수함수 : 가벼인수(...)를 이용한 함수

#include <stdarg.h> //일반 적인 가변 인수 함수의 구조 void VarFunc(int Fix, ...) { va_list plter; va_star(plter, Fix);
while() //모든 인수를 다 읽을 때 까지 { va_arg(pValue, 인수타입); } va_end(pValue); 

} 


가. va_list : 전달된 인수들은 스택에 저장되고 함수는 스택에서 인수를 꺼내 쓴다.

va_list타입은 char*형으로 정의됭져 있고 가변이수를 읽기 위한 포인터 변수이다.


나. va_start(plter, 마지막 고정 인수), plter포인터변수가 첫번째 가변인수를 가리키도록 초기화 한다.

마지막 고정인수의 번지에 길이를 더해서 가변인수가 시작되는 번지를 계산한다.


다. va_arg(plter, 인수타입) 가변인수를 실제로 읽는 명령어, plter 위치에서 인수타입에 맞는 값을 읽어 리턴하여 plter를 다음 가변 가변인수 위치로 옮겨준다. va_arg는 매크로 함수이기 때문에 타임명이 내부적으로 sizeof연산자와 캐스트 연산자로 전달되어 인수로 받을 수 이싿.


라. va_end(plter) 가변인수로 다 읽은후 뒷정리하는데 별다른 동작은 하지 않는다.