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 |