0

重複の可能性:
誰でもこれらの未定義の動作を説明できますか (i = i++ + ++i 、 i = i++ など…)

int main()
{
int a=5,s;
s=++a + ++a;
printf("%d",a);
printf("%d",s);
}

出力は 7 と 14 です

しかし

int main()
{
int a, s;
printf("Enter value of a");
scanf ("%d",&a);
s=++a + ++a;
printf("%d",a);
printf("%d",s);
}

ユーザーが与える入力は 5 出力は 7 と 13 です

なぜ?

4

4 に答える 4

3

未定義の動作:

s=++a + ++a;

未定義の場合は何でも発生する可能性があるため、動作は完全に有効です。

于 2010-08-17T09:04:46.693 に答える
1

これはコンパイラーの最適化のアーティファクトであると思われます。最初の例aでは既知であるため、コンパイラーは追加の前にプリインクリメントを最適化します。2 番目の例では、値が不明であり、コンパイラはシーケンスを最適化せず、左から右に完了します。これは特定のコンパイラの機能である可能性があり、具体的に調べる必要があります。

于 2010-08-17T09:06:29.347 に答える
1

未定義の動作。変更しないと、猛禽類に襲われる危険があります。

于 2010-08-17T09:09:41.657 に答える
0

こんにちは、このコーディングは VI コンパイラで正しく機能しています。

于 2010-08-17T09:10:06.523 に答える