/******************************************************************************/ /* */ /* FILE: april.cpp */ /* */ /* An example for a function with variable arguments */ /* ================================================= */ /* */ /* Compiled and tested with Visual C++ 6.0 */ /* */ /* V1.00 30-APR-2003 P. Tellenbach http://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream> using namespace std ; void print( char *pc ) { cout << *pc ; if( *pc != '\n' ) print( pc + sizeof(int) ) ; } void printlist( char ch, ... ) { print( &ch ) ; } int main() { printlist( 'H','e','l','l','o',' ','w','o','r','l','d',' ','!','\n' ) ; return 0 ; }
Update 30. April 2023
This program did not produce the expected output. The pointer arithmetic was questionable from the beginning and therefore I rewrote it using va_list.
/******************************************************************************/ /* */ /* FILE: april.cpp */ /* */ /* An example for a function with variable arguments */ /* ================================================= */ /* */ /* Compiled and tested with Visual C++ 6.0 */ /* */ /* V1.00 30-APR-2003 P. Tellenbach http://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream> #include <cstdarg> using namespace std ; void print( char ch, va_list args ) { cout << ch ; if( ch != '\n' ) { ch = static_cast<char>( va_arg(args,int) ) ; print( ch, args ) ; } } void printlist( char ch, ... ) { va_list args ; va_start( args, ch ) ; print( ch, args ) ; va_end( args ) ; } int main() { printlist( 'H','e','l','l','o',' ','w','o','r','l','d',' ','!','\n' ) ; return 0 ; }