私の C コンパイラのテスト環境は、ほとんどが printf を使ったものでして、当初これらのテストを作成したとき、printf の書式文字列に無頓着でした。
unsigned int ui;
long int li;
...
printf("ui = %d li = %x\n", ui, li);
のようなコードを多数書いてしまったのです。最近、このようなテストを修正しなければならないはめになってしまいました。本来なら
printf("ui = %u li = %lx\n", ui, li);
とでもして %d や %x ではなく %u や %lx とするべきでした。
そこで、printf の書式文字列に対して、引数が妥当かどうかをチェックする簡単なツールがあったらどうかと考えてみたのです。
例えば, 上のようなコードに対しては
%d に unsigned int が指定されている
%x に long int が指定されている
といった警告メッセージを出力するものです。