-3

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

以下の出力の理由を説明してください。

#include <stdio.h>

int main()
{
    int i = 0, j = 0;
    int val1 = 0;
    int val2 = 0;

    val1 = i+++i+++i++ ;
    val2 = ++j+++j+++j ;

    printf("value = %d\n", val1);
    printf("value = %d\n", val2);
    return 0;
}

出力:

value = 0  
value = 7
4

2 に答える 2

1

間にシーケンス ポイントがない変数の複数の変更は、未定義の動作です。

これは、何が起こるべきかについて仕様に定義がないことを意味します。コンパイラは、やりたいことを自由に実行できます。

;シーケンス ポイントは、 、&&||?および:三項演算子 and にのみ存在し,ます (コンマ演算子。関数呼び出しで引数を区切るコンマと混同しないでください)。

于 2012-04-13T11:24:40.137 に答える
1

介在するシーケンス ポイントなしで同じ変数を複数回変更しています。これはUndefined Behaviorです。
未定義の動作とは、プログラムの動作に実行可能な説明がある場合とない場合があることを意味します。

よく読んでください:
未定義の動作とシーケンス ポイント

于 2012-04-13T11:24:57.763 に答える