printf 함수 처럼 인수가 몇개가 될지 모르는 경우 사용하는 변수를 가변인수라  한다..

가변 인수는 함수의 원형 정의시에 '...' 으로  한다

예) testvq(...) { 코드 }

 

가변 인수 사용시 가변인수 왼쪽의 인수는 정의해 줘야 한다.

예) testvq(int vqnum,...) {코드}

 

인수들은 스택에 저장된다

오른족 인수부터 왼쪽으로 차례대로 스택에 저장된다

 

따라서 가변인수 사용시 가변인수 왼쪽 인수를 명시적으로

지정하여  두지 않으면

가변인수를 참조할수 있는 방법이 없다

지정하여 두면 그 인수를 기준으로 포인터를 사용

가변인수들을 참조할수 있다.

 

가변인수를 포인터를 사용 참조할수도 있지만

더 쉬운 매크로를 사용하여 참조할수도 있다.

 

va_list 변수명; // 가변인수 참조에 사용할 변수

va_start(변수명,인수); // 변수명은 va_list로정의된 변수, 인수는 가변인수 왼쪽의 인수

변수는 인수의 형 만큼 크기의 다음 메모리를 가리키게 된다

va_arq(변수명,자료형);  //  변수명은 va_list로 정의된 변수, 자료형은

변수명의 현재 위치에서 자료형 크기 만큼의 메모리를 읽어 지정된 자료형으로 반환하며

자료형 만큼 크기의 다음 메모리를 가리키게 된다.

va_end(변수명); //변수명은 va_list로 정의된 변수로 가변인수 참조를 종료한다

'C,C++' 카테고리의 다른 글

UNICODE 매크로  (0) 2013.07.19
문자셋  (0) 2013.07.18
auto와 static 변수  (0) 2013.07.01
struct 멤버 바운더리 해결  (0) 2013.06.30
VC6에서 디버그(Debug),릴리즈(Release) 변경 실행파일 만들기  (0) 2013.03.31

+ Recent posts