ゼロ除算に関して、標準は次のように述べています。
C99 6.5.5p5 - / 演算子の結果は、第 1 オペランドを第 2 オペランドで割った商です。% 演算子の結果は剰余です。どちらの操作でも、2 番目のオペランドの値がゼロの場合、動作は未定義です。
C++03 5.6.4 - 二項 / 演算子は商を生成し、二項 % 演算子は最初の式を 2 番目の式で割った剰余を生成します。/ または % の 2 番目のオペランドがゼロの場合、動作は未定義です。
上記の段落を額面どおりに受け取るとしたら、答えは明らかに両方の言語の未定義の動作です。ただし、C99 標準をさらに下に見ると、矛盾しているように見える次の段落が表示されます(1)。
C99 7.12p4 - マクロ INFINITY は、利用可能な場合、正または符号なし無限大を表す float 型の定数式に展開されます。
標準には、未定義の動作が (潜在的に) 矛盾するステートメントに取って代わられない、ある種の黄金律がありますか? それを除けば、実装で INFINITY マクロが定義されている場合、ゼロによる除算はそのように定義されていると結論付けるのは不合理ではないと思います。ただし、実装でそのようなマクロが定義されていない場合、動作は未定義です。
2 つの言語のそれぞれについて、この問題に関するコンセンサスが (あるとすれば) どのようなものなのか、興味があります。int i = 1 / 0
整数除算と浮動小数点除算について話している場合、答えは変わりfloat i = 1.0 / 0.0
ますか?
注 (1)<cmath>
C++03 標準では、INFINITY マクロを含むライブラリについて言及されています。