printf
、fprintf
、sprintf
などの関数とvprintf
、vfprintf
、vsprintf
などの関数の違いは、関数の引数をどう扱うかと関係していると私は理解しています。しかし、具体的にどのように?実際にはどちらかを使用する理由はありますか?私はちょうどprintf
をCで見るのがより一般的なものとして使うべきですか、または代わりにvprintf
を選ぶ正当な理由はありますか?printf関数ファミリとvprintf関数ファミリの違いは何ですか?また、どちらを使うべきですか?
38
A
答えて
59
printf()
友人は通常の使用のためです。と友人は、あなた自身のprintf()
のような機能を書いてみたいときに使います。あなたがエラーを印刷する機能を書きたいと言う:printf()
ではなく1つのva_list
引数よりも、多くの引数をとりますので、あなたは、あなたがprintf()
にargs
を渡すことができないことに気づくでしょう
int error(char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
// what here?
va_end(args);
return result;
}
。機能は、しかし、はので、ここでは、代わりに引数の数が可変のva_list
引数を取るか完成版です:あなたは同じように動作し `警告()`関数をしたい、もちろん
int error(char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
fputs("Error: ", stderr);
result = vfprintf(stderr, fmt, args);
va_end(args);
return result;
}
13
を直接使用することは決してありませんが、必要なときには非常に便利です。ラップprintf()
。これらの場合、可変引数(...)を持つトップレベル関数を定義します。次に、それらをva_list
に集めて処理し、最終的ににと電話をかけて、プリントアウトを取得します。
関連する問題
- 1. Haskellでprintf関数のファミリを書く方法(デバッグプリントなど)
- 2. C内のsetcontext関数ファミリは継続していますか?
- 3. 適用ファミリに関数引数を含めるにはどうすればよいですか?
- 4. javascriptのvar関数と関数の違いは何ですか?
- 5. 列ファミリの数に関するBigtableの設計とクエリ
- 6. JAppletとAppletの違いは何ですか?また、どちらを使うべきですか?
- 7. Seq関数とofList関数の違いは何ですか?
- 8. 関数と*関数の違いは何ですか?
- 9. MPI_ *関数とPMPI_ *関数の違いは何ですか?
- 10. コールバック関数と正規関数の違いは何ですか?
- 11. JS:関数式と関数式の違いは何ですか?
- 12. スレッドエントリ関数と通常関数の違いは何ですか?
- 13. printf関数は打ち鳴らす
- 14. aspnet_Usersとaspnet_Membershipとは何ですか?どちらを使うべきですか?違いはなんですか?
- 15. GLMモデルをフィッティングするときのリンク関数と 'normal'ファミリの指定R
- 16. C++ getとtypecastingの使い方の違いは何ですか?どちらを使うべきですか?
- 17. Sxmlとxexpとの違いは何ですか?なぜ私はどちらを使うべきですか?
- 18. sageで変数ファミリを定義する
- 19. 関数ハンドルとは何ですか?どのように役立ちますか?
- 20. mtsオブジェクトに関数ファミリを適用する
- 21. プロトタイプ関数とjavascriptの通常の関数との違いは何ですか?
- 22. OPENDIR関数はどのように使うべきですか?
- 23. exec *関数ファミリの後にコードを実行
- 24. PHP5.3で参照関数と通常関数の違いは何ですか?
- 25. 関数内で定数のどちらを好むべきですか:constexpr constまたはenum?
- 26. RegExpのexec()関数とStringのmatch()関数の違いは何ですか?
- 27. Win32 APIの `A`関数と` W`関数の違いは何ですか?
- 28. MATLABのplotconfusion関数とConfusionmat関数の違いは何ですか?
- 29. Pythonのjson.load()関数とjson.loads()関数の違いは何ですか?
- 30. PTHREAD_PRIO_INHERITとPTHREAD_PRIO_PROTECTの違いは何ですか?次の関数で
あなたは_own_ 'vprintf()'スタイル関数を作成します: 'int verror(char * prefix、char * fmt、va_list args);' 'error()'を持っています。 "Error:"と "warn()"を "Warning:"と呼ぶが、それはすべての意味論だ。 –
バリデーション機能を学ぶ時間!この答えは物事をクリアしました、ありがとう。 –