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. javascriptのvar関数と関数の違いは何ですか?
- 4. コールバック関数と正規関数の違いは何ですか?
- 5. スレッドエントリ関数と通常関数の違いは何ですか?
- 6. 関数と*関数の違いは何ですか?
- 7. JAppletとAppletの違いは何ですか?また、どちらを使うべきですか?
- 8. aspnet_Usersとaspnet_Membershipとは何ですか?どちらを使うべきですか?違いはなんですか?
- 9. C++ getとtypecastingの使い方の違いは何ですか?どちらを使うべきですか?
- 10. mtsオブジェクトに関数ファミリを適用する
- 11. 関数ハンドルとは何ですか?どのように役立ちますか?
- 12. exec *関数ファミリの後にコードを実行
- 13. プロトタイプ関数とjavascriptの通常の関数との違いは何ですか?
- 14. PHP5.3で参照関数と通常関数の違いは何ですか?
- 15. RegExpのexec()関数とStringのmatch()関数の違いは何ですか?
- 16. Win32 APIの `A`関数と` W`関数の違いは何ですか?
- 17. 私はどんなmysqli関数を使うべきですか?
- 18. インラインメンバー関数と通常メンバー関数の違いは何ですか?
- 19. メンバ関数以外の非フレンド関数をいつ使うべきですか?
- 20. これらのうち、どちらが優れたPHP関数ですか?
- 21. 引数をとらない関数とは何ですか?
- 22. ある関数から別の関数に変数を渡すにはどうしたらいいですか?
- 23. どちらを使うべきですか? decimal.Add()または "+"
- 24. MATLABのスクリプトと関数の違いは何ですか?
- 25. のfile_get_contentsと関数freadの違いは何ですか
- 26. コルーチンC++インライン関数との違いは何ですか?
- 27. メソッドとフリー関数の微妙な違いは何ですか?
- 28. ハンドラとコールバック関数の違いは何ですか?
- 29. 標準列ファミリ対スーパー列ファミリ
- 30. PHPのmysqli_real_escape_string()関数をいつ使うべきですか?
あなたは_own_ 'vprintf()'スタイル関数を作成します: 'int verror(char * prefix、char * fmt、va_list args);' 'error()'を持っています。 "Error:"と "warn()"を "Warning:"と呼ぶが、それはすべての意味論だ。 –
バリデーション機能を学ぶ時間!この答えは物事をクリアしました、ありがとう。 –