¿Es posible iterar sobre argumentos en macros variadic?

Me preguntaba si es posible iterar sobre los argumentos pasados ​​a una macro variadic en C99 o usar alguna extensión GCC?

Por ejemplo ¿Es posible escribir una macro genérica que tome una estructura y que sus campos pasen como argumentos e imprima el desplazamiento de cada campo dentro de la estructura?

Algo como esto:

struct a {
    int a;
    int b;
    int c;
};

/* PRN_STRUCT_OFFSETS will print offset of each of the fields 
   within structure passed as the first argument.
*/

int main(int argc, char *argv[])
{
    PRN_STRUCT_OFFSETS(struct a, a, b, c);

    return 0;
}

Respuestas a la pregunta(9)

Su respuesta a la pregunta