Printfのような可変数のパラメーターを受け入れ、いくつかのことを行い、変数リストをprintfに渡す関数を記述しようとしています。これをスタックにプッシュする必要があるように見えるので、これを行う方法はわかりません。
ほぼこのようなもの
#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;
}
何か案は?
結果をprintf
に渡さないでください。それらをvprintf
に渡します。 vprintf
は特にva_list
引数。 Linuxのmanページから:
#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 );
}
va_start()
/vprintf()
/vsnprintf()
/va_end()
を探していると思いますが、これらを自分で実装する必要はありません。
Arglist値を、それを消費するように設計された関数に渡します。手がかりについては、stdargおよびvprintfのドキュメントを参照してください。