Cの他の関数に変数引数を渡そうとしましたが、同じ環境での異なる実行だけでなく、異なるランタイム環境でも一貫性のない結果が生成されます。
int main()
{
int result = myprintf("Something \n %d", 9);
return result;
}
int myprintf(const char *format, ...){
printf("Something \n %d", 9);
printf("\n");
va_list args;
va_start(args, format);
int result = printf(format,args);
printf("\n");
va_end(args);
return result;
}
そして、生成される結果は次のとおりです。
WWW.FIRMCODES.COM
9
WWW.FIRMCODES.COM
438656664
「438656664」の理由が見つかりませんでした。
可変個引数を可変個引数関数に渡すことはできません。代わりに、va_list
を引数として取る関数を呼び出す必要があります。標準ライブラリは、va_list
をとるprintf
およびscanf
のバリアントを提供します。それらの名前には接頭辞v
が付いています。
あなたの例は次のようになります:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
int printfln(const char *format, ...)
{
int result;
va_list args;
va_start(args, format);
result = vprintf(format, args);
printf("\n");
va_end(args);
return result;
}
int main()
{
int result = printfln("Something \n %d", 9);
printf("(%d)\n", result);
return 0;
}
たとえば、画面に出力するために2つのv...
関数とログファイルを呼び出す場合、いくつかの落とし穴があります。v...
関数はva_list
を使い果たす可能性があるため、渡す必要があります。コードが移植可能である必要がある場合は、呼び出しごとに新しいもの。