0

重複の可能性:
誰でもこれらの未定義の動作を説明できますか (i = i++ + ++i 、i = i++ など…)
未定義の動作とシーケンス ポイント

#include<stdio.h>
int main(){
int i=5,j=5,y,x;
int m=++i;
int n=++i;
x=m+n;
y=++j + ++j ;
printf("%d  %d ",x,y);
return 0;
}

OUTPUT : 13 14 「y」の値が 13 ではなく 14 である理由を説明してください。

4

1 に答える 1

2

ほとんどのコンパイラは、加算を実行して値を y に割り当てる前に j を 2 回インクリメントします。そのため、この場合の結果は 14 になります。

ただし、C 標準ではその式の評価順序が指定されていないため、別のコンパイラでは結果が実際に 13 になる可能性があります。

つまり、これは未定義の動作であり、難読化コンテストやパズル以外では使用しないでください。

于 2012-11-17T18:52:09.337 に答える