12/08/03 06:03:44.98
>>681
規格の後段について、よく理解できました。ありがとうございます。
規格の前段の記述が hoge() のみの事情なのか printf() にも適用されるのかは、意見が相違するようですね。
>>683
ふむ。
しかしいまとなっては参考にするには古いK&R2=C89・付録A7.3.2 には次のとおりで(以下<>内はQZ)
省略形<=", ...">の場合、引数<実引数>の数はパラメータ<=関数定義やプロタイプ宣言での引数型宣言>の数と等しいかあるいはそれより多くなっている必要がある。
型が明示されているパラメータの後に続く引数は、前のパラグラフ<=K&R1の関数定義について>で述べた省略時の引数格上げの受ける。
とありC89 の場合であれば printf() のような可変長引数の、可変長部分、すなわちプロトタイプのない実引数は格上げを受ける、と読み取れます。
なお、K&R1 ではどんな float も double に変換されてしまうという(int main(); int c; char **v; だったし)事情が、
K&R2=C89 では可変長部分やプロトタイプの部分に限定されるようになったとは理解しています。
ともあれ、これに対応する C99 の記述はどこなのか、それとも C99 は自動格上げを行う範囲をさらにさらに限定したのかいまいち判然としないところです。
>受取った方がその型を知る方法は書式指定によると理解していいと思う。
これはK&R1の呪縛に囚われた身には辛い。>>639 と解釈してきた以上、printf() 第一引数の書式指定が printf() の第二引数以降の型を規定するとは考えにくいのです。