#include <stdio.h>
#define VA_EXAMPLE(...) (varargsExample((NameAndLong[]){__VA_ARGS__}))
typedef struct NameAndLong { const char * name; long long value; } NameAndLong;
long varargsExample( NameAndLong things[ ] ) ;
int main( int argc, char ** argv)
{
VA_EXAMPLE(
{ "TestInt" , 0 } ,
{ "TestIntNegative" , - 1 } ,
{ "TestLong" , 0 } ,
{ "TestSomethingBig" , 1LL<< 62 } ,
{ "TestLongNegative" , - 1 } ,
{ NULL} ) ;
return 0 ;
}
long varargsExample( NameAndLong things[ ] )
{
const char * name;
long long nextValue;
while ( ( name = things-> name) != 0 )
{
nextValue = things++-> value;
printf ( "Got [%s] with value [%lld]\n " , name
, nextValue
) ; }
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFZBX0VYQU1QTEUoLi4uKSAodmFyYXJnc0V4YW1wbGUoKE5hbWVBbmRMb25nW10pe19fVkFfQVJHU19ffSkpCnR5cGVkZWYgc3RydWN0IE5hbWVBbmRMb25nIHsgY29uc3QgY2hhciogbmFtZTsgbG9uZyBsb25nIHZhbHVlOyB9IE5hbWVBbmRMb25nOwpsb25nIHZhcmFyZ3NFeGFtcGxlKE5hbWVBbmRMb25nIHRoaW5nc1tdKTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAgVkFfRVhBTVBMRSgKICAgICAgeyJUZXN0SW50IiwgMH0sCiAgICAgIHsiVGVzdEludE5lZ2F0aXZlIiwgLTF9LAogICAgICB7IlRlc3RMb25nIiwgMH0sCiAgICAgIHsiVGVzdFNvbWV0aGluZ0JpZyIsMUxMPDw2Mn0sCiAgICAgIHsiVGVzdExvbmdOZWdhdGl2ZSIsIC0xfSwKICAgICAge05VTEx9KTsKICAgIHJldHVybiAwOwp9Cgpsb25nIHZhcmFyZ3NFeGFtcGxlKE5hbWVBbmRMb25nIHRoaW5nc1tdKQp7CiAgICBjb25zdCBjaGFyICogbmFtZTsKICAgIGxvbmcgbG9uZyBuZXh0VmFsdWU7CiAgICB3aGlsZSAoKG5hbWUgPSB0aGluZ3MtPm5hbWUpICE9IDApCiAgICB7CiAgICAgICAgbmV4dFZhbHVlID0gdGhpbmdzKystPnZhbHVlOwogICAgICAgIHByaW50ZigiR290IFslc10gd2l0aCB2YWx1ZSBbJWxsZF1cbiIsIG5hbWUsIG5leHRWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==