#include <stdio.h>

void f (int w,...)
{
  //
  // Traduce l'indirizzo di «w» nel puntatore «p».
  //
  char *p = (char *) &w;
  //
  // Sposta il puntatore all'inizio del secondo parametro.
  //
  p = p + sizeof w;
  //
  // Mostra il valore del primo e del secondo parametro.
  //
  printf ("w = %i; ", w);
  printf ("x = %Lf; ", *((long double *)p));
  //
  // Sposta il puntatore all'inizio del terzo parametro.
  //
  p = p + sizeof (long double);
  //
  // Mostra il terzo parametro.
  //
  printf ("y = %lli; ", *((long long int *)p));
  //
  // Sposta il puntatore all'inizio del quarto parametro.
  //
  p = p + sizeof (long long int);
  //
  // Mostra il quarto parametro.
  //
  printf ("z = %i\n", *((int *)p));
  //
  return;
}

int main (int argc, char *argv[])
{
  f (10, (long double) 12.34, (long long int) 13, 14);
  return 0;
}