C parámetro variable de idioma "..."

Una función del parámetro variable representa: Tipo de diversión (int num, ...)

Donde el tipo representa el tipo de valor de retorno de la función, NUM representa el número de parámetros, y "..." indica todos los parámetros.

Ejemplo: diversión char (int num, ...);

Dos, va_list, va_start (), va_arg (), va_end () la función y el significado original de la representación.

  1, va_list: representa la lista de parámetros.

  2, va_start (): una lista de parámetros de inicialización.

  3, va_arg (): Obtener un diferentes parámetros de tipo.

  4, va_end (): Vaciar la lista de parámetros.

  5, char * typedef va_list; 

     #define _INTSIZEOF (n) ((sizeof (n) + sizeof (int) -1) y ~ (sizeof (int) - 1))
     #define va_start (ap, v) (ap = (va_list) y 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) y ~ (b-1): cuando A y B son ambos n-ésima potencia de 2, se puede obtener el más pequeño múltiplo de la máxima de a y b.

    Por lo tanto, (sizeof (n) + sizeof ( int) -1) y ~ (sizeof (int) - 1) se puede utilizar para la alineación de bytes.

#include <stdio.h>  
#include <stdarg.h> int FUNC ( int NUM, ...)   // NUM representativo del número de parámetros {  
     Char ** ARR; 
     int Inter [ 2 ];
     Doble Dou [ 3. ];
     int I; 
    la lista va_list;   // lista de parámetros 
    del va_start (lista, NUM);   // inicialización lista de parámetros para (i = 0 ; I < 2 ; I ++ ) { 
        Inter [I] = la va_arg (lista, int );   // Get int tipo de parámetro 
        printf ( "



    inter [% d] =% d \ n " , i, entre [i]); 
    } 
    
    para (i = 0 ; i < 3 ; i ++ ) { 
        Dou [i] = va_arg (lista, doble );   // 获取doble类型参数[Warning] 'float' es promovido a 'doble' cuando pasa a través '...' 
        printf ( " Dou [% d] =% lf \ n " , i, Dou [i]); 
    } 
    
    para (i = 0 ; i < 5 ; i ++ ) { 
        arr [i] = va_arg (lista, Char *);   // 获取int类型参数 
        printf ( " arr [% d] =% s \ n " , i, arr [i]) ;
    }
    volver  0 ; 
} 
 
Int main () { 
    func ( 10 , 1 , 2 , 1,0 , 2,0 , 3,0 , " aaa " , " bbb " , " ccc " , " ddd " , " eee " ); 
}

 

 

 

Supongo que te gusta

Origin www.cnblogs.com/ligei/p/12443841.html
Recomendado
Clasificación