2011-09-16 6 views
0

fprintfが継承する肥大のため、fprintf(stderr, "Error occured with file %s\n", file);のfprintf呼び出しをvfprintf(FILE * stream, const char * format, va_list arg)に置き換えます。 これにラッパー関数を記述することなく、vfprintfを使用することは可能ですか?何とかva_list引数を作成していますか?ラッパー関数なしでvfprintfを使用しますか?

+2

'fprintf'はそう 「継承fprintfの肥大化」とは、一つまた、vfprintf実際にはそれ自体でvfprintf''の非常に薄いラッパーです。それ以外の場合は、正確にあなたが膨らんだと思うものを説明する必要があります。 –

+0

私はそれを知らなかった、ありがとう。私のコードをdietlibcとリンクしています。これは、そのprintfをコンパイルするときに警告します。 '/opt/diet/lib-x86_64/libc.a(vfprintf.o):関数\' vfprintf ':(.text + 0x2e ):警告:警告:printf関数は数キロバイトのbloatを追加します.'それほど膨らみがなく、警告もありません。 – thpetrus

+0

"膨張"とは、 'vfprintf'を含むprintfファミリ全体からのものです。これを避ける唯一の方法は、文字列フォーマット関数をまったく使用しないことです。 – duskwuff

答えて

0

上記のコメントから、printfファミリの機能を完全に回避したいと思っているようです。その場合

は、あなたがこれらの線に沿って何かを使用することができます

fputs("Error occured with file ", stderr); 
fputs(file, stderr); 
fputc('\n', stderr); 
関連する問題