Cプログラミング: 可変引数リストを転送する 質問する

Cプログラミング: 可変引数リストを転送する 質問する

printf のように可変数のパラメータを受け入れ、いくつかの処理を実行してから、変数リストを printf に渡す関数を記述しようとしています。 それをスタックにプッシュする必要があるようなので、これをどのように実行すればよいかわかりません。

大体こんな感じ

http://pastie.org/694844

#include <stdio.h>
#include <stdarg.h>

void forward_args( const char *format , ... ){
  va_list arglist;
  printf( format, arglist );
}


int main (int argc, char const *argv[]){
  forward_args( "%s %s\n" , "hello" , "world" );  return 0;
}

何か案は?

ベストアンサー1

結果を に渡さないでくださいprintf。 に渡してくださいvprintf。は、引数vprintfの受け渡しを処理するために特別に存在しますva_list。 Linux のマニュアル ページから:

#include <stdio.h>

int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);

#include <stdarg.h>

int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);

後者は、パラメータ リストを受け取るva_list関数内で宣言する引数などを明示的に受け取ることに注意してください。したがって、関数は次のように宣言されます。...

void forward_args( const char *format , ... ){
   va_list arglist;
   va_start( arglist, format );
   vprintf( format, arglist );
   va_end( arglist );
}

おすすめ記事