변수 매개 변수 기능을 나타냅니다 형의 재미 (INT NUM, ...)
타입 함수 반환 값의 형태를 나타내고, NUM 파라미터의 개수를 나타내고, "..."모든 매개 변수를 나타낸다.
예 : 문자 재미 (INT 인분, ...);
둘의 va_list, va_start를 () va_arg를 () va_end의 () 함수의 표현의 원래 의미한다.
1의 va_list는 : 파라미터리스트를 나타낸다.
2 va_start를 () : 초기화 파라미터의리스트.
3, va_arg를 () : 다른 유형의 매개 변수를 가져옵니다.
4, va_end의 () : 매개 변수의 목록을 비 웁니다.
5 * CHAR 타입 정의의 va_list;
#DEFINE _INTSIZEOF (N) ((는 sizeof (N) +는 sizeof (INT) -1) ~ (는 sizeof (INT) - 1))
#DEFINE va_start를 (AP, V) (AP = (의 va_list) V + _INTSIZEOF (V ))
#DEFINE va_arg를 (AP, t) (* (t *) ((AP + = _INTSIZEOF (t)) - _INTSIZEOF (t)))
#DEFINE va_end의 (AP) (AP = (의 va_list) 0)
도 6 (A + B-1) ~ (b-1) A 및 B는 제 n (2)의 전원을 둘 때, a와 b의 최대의 최소 배수를 얻을 수있다.
따라서, (는 sizeof (N) +는 sizeof ( INT) -1) ~은 (는 sizeof (INT) - 1)의 바이트 정렬을 위해 사용될 수있다.
#INCLUDE <STDIO.H> #INCLUDE <와 stdarg.h> INT FUNC ( INT NUM, ...) // 파라미터의 수를 나타내는 NUM { CHAR ** ARR; INT 인터 [ 2 ] 더블 Dou의 [ 3. ] INT I; 의 va_list리스트; // 파라미터리스트 va_start를 (목록, NUM); // 초기화 파라미터리스트 대 (I는 = 0 ; I < 2 ; I ++ ) { 인터 [I]를 va_arg를 (목록 = 지능 ); // 얻기 INT 매개 변수 유형 (의 printf를 " 간 [% d를] % D \ n = ' ) 나 인터 [I]; } 에 대한이 (전 = 0 ; I < 3 ; I ++ ) { DOU [I] = va_arg를 (목록 번 ); // 获取더블 통과 할 때类型参数[경고] 플로트 '배'로 승격 '...' 의 printf ( " DOU [%의 D] = % LF \ n " , I, DOU [I]) } 에 대한 (I = 0 ; I < 5 ; I ++ ) { 도착 [I] = va_arg를 (목록, 숯 *); // 获取INT类型参数 의 printf ( " 도착 [%의 D] = % S \ n " , I, 도착 [I]) ; } 반환 0 ; } INT 의 main () { FUNC ( 10 , 1 , 2 , 1.0 , 2.0 , 3.0 , ' AAA ' , ' BBB ' , ' CCC ' , " DDD " , " EEE " ); }