Qual è il meccanismo sottostante a va_list e dove viene definito?

7

link In base al link precedente, va_list è un argomento o parametro utilizzato in alcune macro: va_start , va_arg , va_end . Queste macro sono presenti nel file stdarg.h .

So che va_list può contenere più valori, ma che tipo di entità è va_list ? La mia domanda è qual è il meccanismo sottostante dietro va_list ? Come è in grado di contenere più valori? (Ad esempio, un array può contenere più valori e il meccanismo dietro di esso è costituito da più posizioni di memoria a cui fanno riferimento i valori di pedice. Array è una struttura di dati predefinita presente in C).

La mia seconda domanda è dove è definito va_list ?

    
posta aste123 18.03.2014 - 20:24
fonte

2 risposte

6

La risposta alla tua domanda è qui: link

The va_list type is an array containing a single element of one structure containing the necessary information to implement the va_arg macro. The C definition of va_list type is given in figure below

typedef struct {
   unsigned int gp_offset;
   unsigned int fp_offset;
   void *overflow_arg_area;
   void *reg_save_area;
} va_list[1];

va_list è definito in stdarg.h come afferma link .

Puoi fare riferimento al libro "The Standard C Library" di Plauger se hai bisogno di sapere gli ins e out di std libc.

    
risposta data 15.07.2014 - 11:00
fonte
1

Vedi anche la specifica ABI e chiama le convenzioni per la tua piattaforma di destinazione. Per x86-64 / Linux, leggi il supplemento ABI x86-64 (vedi anche convenzioni di chiamata x86 wikipage).

Diversi aspetti di <stdarg.h> sono costruiti nel compilatore GCC (ad esempio attraverso __builtin_va_start , __builtin_va_arg , ecc. .) e <stdarg.h> è fornito dal compilatore. Vedi anche i suoi __builtin_va_arg_pack , ecc ...

Potresti anche essere interessato libffi (ad es. se vuoi creare dinamicamente una chiamata a una funzione variadica).

    
risposta data 15.07.2014 - 12:47
fonte

Leggi altre domande sui tag