データ型に対してプログラムでフォーマット指定子を推論することはできますか?例えば、印刷は、それが自動的にない何かのように長いためである場合:私は理解してデータ型からフォーマット指定子を除外しますか?
printf("Vlaue of var is <fmt_spec> ", var);
私もそれが
printf("Name is %s",int_val); //Oops, int_val would be treated as an address
printf("Name is %s, DOB is",name,dob); // missed %d for dob
printf("Name is %s DOB is %d", name);//Missed printing DOB
のようなものので、開発者の一部に多少の誤差を低減するであろうと感じている後者の二つ警告はありますが、ほとんどの場合問題になるのでエラーがスローされた方が良いとは思いませんか?あるいは、私は何かを逃しているのですか、そうするためにすでに構築されていますか?
一部のコンパイラ(GCC、Clang)は、フォーマットと引数が一致していないことを警告します。しかし、あなたの質問に答えるには:いいえ、それは本当に可能ではありません。 Cには[イントロスペクション](https://en.wikipedia.org/wiki/Type_introspection)や[反映](https://en.wikipedia.org/wiki/Reflection_(computer_programming))のビルトイン機能はありません。 。実行時に標準の方法でデータの種類を取得することはできません。 –
また、GCCとClangを使用すると、特定の警告を簡単にエラーにすることができます。または* all *警告をエラーにして、特定の警告のエラーを無効にします。 –
フォーマット指定子は型のためのものではありません。例えば。 '%o'と'%x'はどちらも 'unsigned int'をとります。 '%e'、'%f'、 '%g'はすべて' double'をとります。 '%d'、'%i'、 '%c'はすべて' int'をとります。だからあなたは(一般的に)議論からそれらを推論することができないのです。 – melpomene