1) 私は C の未定義の動作について何度も読みました。それは、C がその定義で述べていないいくつかの動作であるため、各コンパイラには実装がありますが、C 標準に違反していません。例は次のとおりx= ++y*4 + ++y*3
です。
しかし、ここで誰かが私に異なる結果をもたらす2つのコンパイラを与えることができますか? 私はそれをテストすることに興味があります。(私のマシンにはmingwしかありません)
2) そして、C は操作の順序について述べていません+ - * /
。例: 1*2 + 3 + 4*5
. * /
が最初に計算されますが、他はわかりません。
したがって、以下の例によると:
int a, b, c;
// assign value for a,b,c
float result = a*b/c; // wrong
float result = (float)a*b/c; // seem true
しかし、b/c
それでも最初に計算できるので、答えは間違っています。したがって、真の型キャストは次のようになります。
float result = a*b/(float)c
しかし、ほとんどの場合、C に関するすべての本、C をコーディングするすべての人は、常に : を使用します(float)a*b/c
。それは常に真実ですか、それとも私たちがよく考えるように「通常のコンパイラ」が左から右に解決すると信じているのでしょうか?
この点について、わかりやすく教えてください。
ありがとう :)