C 언어 변수 매개 변수 "..."

변수 매개 변수 기능을 나타냅니다 형의 재미 (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 " ); 
}

 

 

 

추천

출처www.cnblogs.com/ligei/p/12443841.html