2016-07-19 39 views
-2

私は、この変換がC++では警告を出しますが、cでは警告を出さない理由を探しています。それはC++が強く型付けされ、cが弱型であるという事実に関連していますか? それはコンパイルが警告を指摘しないように、実行中にcの型を判別できるためですか? ありがとうございます。なぜC++でdoubleをintに変換すると警告が出るのですか?

+2

あなたが**データを失うのはちょうどその小数です。したがって、 "Obvious Logical Errors"では、警告が発生します。そして私はあなたがVisual Studioを意味するものと仮定します。 –

+0

'cは弱い型です'あなたはどう思う? – dxiv

+0

具体的な例がありますか? 'int x = 1.0;'はデフォルトでどちらの言語に対しても私に警告を出すものではありません。どのようなコンパイラを使用していますか? –

答えて

10

doubleからintへの警告の有無は、CとC++の違いとは関係ありません。

警告(警告がどのように表示されたのか、その情報で質問を更新してください)が有効である可能性があります。 doubleの切り捨てられた値が表現可能な範囲のintの範囲外の場合、その動作は未定義です。範囲内にあり、数学的に整数に等しくない場合、変換によって情報が失われます。

コンパイラの中には、このようなことについて警告するものもあれば、そうでないものもあります。コンパイラは、指定したオプションに応じて警告を出したり出さないことがあります。

+0

ありがとうコメント。私は最後のgccを使用して私の質問は理論的です。なぜCコンパイラは警告を表示しないのですか? – Pelegyair

+1

@Pelegyair:理論的な理由はありません。 CとC++にまったく同じ考慮事項が適用されます。あなたは症状を見ています(あなたのC++コンパイラからの警告ですが、Cコンパイラからの警告ではありません)。繰り返しますが、使用しているコンパイラに関する情報で質問を更新してください。 –

+1

マイナー: "double値が' int'の表現可能な範囲外にある場合 " - >範囲が_slightly_より大きい。例:-2147483648.999 ...〜2147483647.999 ... – chux

関連する問題