Czy jest możliwe iterowanie argumentów w makrach variadic?

Zastanawiałem się, czy możliwe jest iterowanie argumentów przekazywanych do makra variadic w C99 lub używanie jakichkolwiek rozszerzeń GCC?

Na przykład czy jest możliwe napisanie ogólnego makra, które pobiera strukturę i jej pola przekazywane jako argumenty i wypisuje offset każdego pola w strukturze?

Coś takiego:

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;
}

questionAnswers(9)

yourAnswerToTheQuestion