va_list

va_list を扱うためのマクロ、va_start, va_arg, va_end があるけど、それよりは void** にした方がわかりやすいと思うのは自分の気のせいだろうか……。

int sum( int num , va_list args ){
    int s = 0;
    va_list list;
    va_start( list , num );
    for( int i = 0 ; i < num ; i++ ){
        sum += va_arg( list , int );
    }
    va_end( list );
    return s;
}

int sum( int num , void** args ){
    int s = 0;
    for( int i = 0 ; i < num ; i++ ){
        s += *((int*)args + i);
    }
    return s;
}

追記:
va_start とかのマクロの中を見てみたんだけど、引数は4バイトでアライメントされてるのね……。
int なら全然簡単だけど、それ以外の構造体にもキャストすることを考えるとやっぱりマクロを使うべきかもしんない。