#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 ("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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIGYgKGludCB3LC4uLikKewogIC8vCiAgLy8gVHJhZHVjZSBsJ2luZGlyaXp6byBkaSDCq3fCuyBuZWwgcHVudGF0b3JlIMKrcMK7LgogIC8vCiAgY2hhciAqcCA9IChjaGFyICopICZ3OwogIC8vCiAgLy8gU3Bvc3RhIGlsIHB1bnRhdG9yZSBhbGwnaW5pemlvIGRlbCBzZWNvbmRvIHBhcmFtZXRyby4KICAvLwogIHAgPSBwICsgc2l6ZW9mIHc7CiAgLy8KICAvLyBNb3N0cmEgaWwgdmFsb3JlIGRlbCBwcmltbyBlIGRlbCBzZWNvbmRvIHBhcmFtZXRyby4KICAvLwogIHByaW50ZiAoIncgPSAlaTsgIiwgdyk7CiAgcHJpbnRmICgieCA9ICVMZjsgIiwgKigobG9uZyBkb3VibGUgKilwKSk7CiAgLy8KICAvLyBTcG9zdGEgaWwgcHVudGF0b3JlIGFsbCdpbml6aW8gZGVsIHRlcnpvIHBhcmFtZXRyby4KICAvLwogIHAgPSBwICsgc2l6ZW9mIChsb25nIGRvdWJsZSk7CiAgLy8KICAvLyBNb3N0cmEgaWwgdGVyem8gcGFyYW1ldHJvLgogIC8vCiAgcHJpbnRmICgieSA9ICVsbGk7ICIsICooKGxvbmcgbG9uZyBpbnQgKilwKSk7CiAgLy8KICAvLyBTcG9zdGEgaWwgcHVudGF0b3JlIGFsbCdpbml6aW8gZGVsIHF1YXJ0byBwYXJhbWV0cm8uCiAgLy8KICBwID0gcCArIHNpemVvZiAobG9uZyBsb25nIGludCk7CiAgLy8KICAvLyBNb3N0cmEgaWwgcXVhcnRvIHBhcmFtZXRyby4KICAvLwogIHByaW50ZiAoInogPSAlaVxuIiwgKigoaW50ICopcCkpOwogIC8vCiAgcmV0dXJuOwp9CgppbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogIGYgKDEwLCAobG9uZyBkb3VibGUpIDEyLjM0LCAobG9uZyBsb25nIGludCkgMTMsIDE0KTsKICByZXR1cm4gMDsKfQ==