#! perl -slw use strict; #use Inline 'FORCE'; use Inline C => 'DATA', NAME => 'varargs', CLEAN_AFTER_BUILD => 0; myPrintf( '%s ' x @ARGV . "\n", @ARGV ); __DATA__ __C__ #include #include #include void eprintf( const char *template, ... ) { va_list ap; va_start( ap, template ); vfprintf( win32_stderr(), template, ap ); va_end( ap ); } void myPrintf( char *templ, ... ) { inline_stack_vars; char* a[20]; int i; if( inline_stack_items > 20 ) croak( "myPrintf can handle at most 20 arguments." ); for( i = 0; i < inline_stack_items; i++ ) { a[ i ] = SvPVX( inline_stack_item( i ) ); } eprintf( a[ 0], a[ 1], a[ 2], a[ 3], a[ 4], a[ 5], a[ 6], a[ 7], a[ 8], a[ 9], a[10], a[11], a[12], a[13], a[14], a[15], a[16], a[17], a[18], a[19] ); inline_stack_reset; }