-3

ヘッダー ファイルをスキップして main を無効にしています...
コード 1:-

int a = 5 , c ;
c = a++ + ++a + a++;
a = 5;
printf("%d %d",a++ + ++a + a++ , c);
___________________________________________________

出力:-
TCC:- (はい、Borlands 3.0 または DOS-blue 環境用のものと呼ばれるもの)
19 18
19 = どのように ? 5+7+7 で、もしそうなら (間違いなく GCC 出力と比較して) 18 ではないのはなぜですか?

18 = 6+6+6 ? (a++ と同等の c 代入コード
;
c=a+a+a;
a++;
a++;) ですね。
なぜ 19 18 なのか?まったく同じコードに対して2つの異なる値?
GCC:-
19 19
19 両方とも 5+7+7 ? 理にかなっている..

今、コード 2:-

int a = 5 , c ;
c = ++a + ++a + ++a;
a = 5;
printf("%d %d",++a + ++a + ++a, c);
_________________________________________________

TCC:-
24 24 24 同じロジック 8+8+8 (a ++; a++; a++; c=a+a+a;
と同等の c 割り当てコード ) および a = 8 ;





GCC:-
22 22
22 ? どうやって ?通常のロジックでは 6 + 7 + 8 = 21 ですが、出力は 22 ?
次に 6+8+8 で、もしそうならどうやって?

4

1 に答える 1

-1

さまざまなコンパイラが独自の方法で式を実行します。コンパイラは最適化を使用してステートメントを実行する理想的には、コンパイラのバージョン (TCC、GCC、Borland c など) の動作を比較するべきではありません

実行の順序は、最適化手法に応じてコンパイラごとに異なる場合があります

参考回答 :とてもいい説明

試験の観点から、このタイプの問題では教科書の標準に従う必要があります

于 2015-05-01T04:22:53.743 に答える