일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 셰이더프로그래밍
- 오픈지엘
- Graphics
- Geometry Modeling
- 윈도우프로그래밍
- 베지에 곡선
- 컴퓨터 아키텍쳐
- 그래픽스기초
- 그래픽스
- 핵심 API로 배우는 윈도우프로그래밍
- 윈도우 프로그래밍
- 운영체제
- win32
- OpenGL
- MFC 윈도우 프로그래밍
- denoising
- modeling
- bezier curve
- shader
- MFC
- 윈도우
- 렌더링
- shader programming
- window programming
- Mesh Processing
- Win32 API
- 컴퓨터 구조
- 윈도우 구조
- c4d
- 셰이더
- Today
- Total
오다기리 박의 알고리즘 노트
가변 인수 함수란? (va_start(), va_end(), va_arg 본문
가변 인수 : 인수의 개수와 타입이 미리 정해져 있지 않다는 뜻이며 그런 인수를 사용하는 함수를 가변인수 함수라고 함.
예) int printf(const char *format, …);
첫 번째 인수는 format이라는 이름의 문자열 상수로 서식 문자열(고정 인수)이라고도 한다.
두번 째 이후의 인수에는 타입과 인수 이름이 명시되어 있지 않으며 대신 생략 기호인 … 가 적혀 있다.
생략기호는 컴파일러에게 이후의 인수에 대해서는 개수와 타입을 점검하지 않도록 하는데 이 기호에 의해 가변 인수가 가능해진다.
컴파일러는 … 이후의 인수에 대해서는 개수가 몇개든지 어떤 타입이든지 상관하지 않고 있는 그대로 함수에게 넘겨 주므로 얼마든지 많은 임의 타입의 인수들을 전달할 수 있다.
가변 인수 함수 내부에서 인수를 읽기 위한 매크로 함수들
void VarFunc(int Fix, …)
{
va_list ap;
va_start(ap,Fix);
while(모든 인수를 다 읽을 때까지){
va_arg(ap, 인수타입);
}
va_end(ap);
}va_list : 함수로 전달되는 인수들은 스택에 저장되며 함수는 스택에서 인수를 꺼내 쓴다. 스택에 있는 가변 인수를 읽을 때 현재 읽고 있는 번지를 기억하기 위한 포인터 변수이다.
va_start(ap, 마지막고정인수) : 가변 인수를 읽기 위한 준비를 하는데 ap 포인터 변수가 첫 번째 가변 인수를 가리키도록 초기화하는 역할. va_start 내부에서는 마지막 고정 인수 다음 번지로 ap를 맞추어 주므로 이후부터 ap번지를 읽으면 순서대로 가변 인수를 읽을 수 있다.
va_arg(ap, 인수타입) : ap 위치에서 타입에 맞는 값을 읽어 리턴해주며 또한 ap를 다음 가변 인수 위치로 옮겨준다.
va_end(ap) : 가변 인수를 다 읽은 후 뒷정리.
가변 인수 함수의 조건
반드시 하나 이상의 고정 인수를 가져아 함.
'프로그래밍 잡지식' 카테고리의 다른 글
스마트 포인터 (0) | 2021.08.11 |
---|---|
그리스 문자 (0) | 2021.08.11 |
문자열을 모두 소문자로 변경하기 (0) | 2021.08.11 |
프로세스 이름으로 프로세스 ID찾기 (0) | 2018.08.25 |