[明確にするために組織と内容を更新]
本当の質問
C にとって、プログラマーがタイピングしている間に、プロジェクト固有の printf のようなデバッグ関数への安全で正しい呼び出しを作成するのに役立つ良い方法は何でしょうか?
Cマクロ?C ラッパー関数? コード エディターのマクロまたはテンプレート? 他の?
背景に関する質問と回答
多くのソフトウェアは、問題が発生した場合のアドホックまたはデバッグ ログのいずれかで、デバッグに printf または printf に似た関数を使用します。それでも、エラーが発生しやすいです。
Q1: どのように私たちは知っていますか?
A1: スタティック アナライザーには、printf-mismatch エラーのカテゴリがあります。これはエラーの一般的なクラスです。これらのツールが C コードでこれらの警告を呼び出すのをよく目にします。
Q2: このエラーのサブクラスは何ですか?
A2: 主に、書式指定子の誤りと、書式指定子の数の誤りです。多くの場合、実際のエラーは逆です: 変数の型が間違っているか、出力する変数の数が間違っています。
Q3: なぜ気にするのですか?
A3: せいぜい、間違ったログ情報を引き起こし、デバッグを妨げます。最悪の場合、ソフトウェアがクラッシュします。
Q4: この問題について何かしようとした人はいますか?
A4: 確かに、(C++ などとは対照的に) C 用のものは見たことがありませんが、たとえば、次のようになります。
http://www.ddj.com/cpp/184401999?pgno=1 http://mi.eng.cam.ac.uk/~er258/cvd/tag/html/group__printf.html
これらの製品やその他の製品で私が欠けているのは、現在 C で書かれた製品を見ており、C の問題を解決する必要があるという事実に加えて、それらが事後の解決策であるということです。彼らはクラッシュを回避でき、何がうまくいかなかったのか、何かがうまくいかなかったという警告の説明を提供できますが、プログラマーの意図が何であったかを推測することはできません (特に上記の Q&A #2 を参照)。
Q5: printf を使用するとエラーが発生しやすいのはなぜですか?
A5: printf 呼び出しを記述するには、プログラマーが変数の型と数、書式指定子、フリー テキスト文字列定数、および句読点 (これらはすべて互いに非常によく似ている) を 1 行に混在させる必要があるためです。