質問

I don't know where to search for this (probably the standard but still don't know what to search for), so I will ask this here.

If in some execution array[i2] will be set to array[i] where i2 happens to be equal to i, then is this defined behavior?

I'm using C99 (with gcc 4.8.1), looking at the assembly with gcc -S, I don't see anything suspicious.

役に立ちましたか?

解決 3

If variable i has valid value then assignment

i = i;

has perfectly defined behavior. This is equivalent to your question, as stated.

If there's something more tricky in your situation, you have to provide more details about it.

他のヒント

This is absolutely defined behaviour. The right-hand-side of an assignment is calculated first, then assigned to the left-hand-side. Note that the left-hand-side must resolve to an lvalue.

foo() {
  int i, j, a[5], b[5];
  i = i; // undefined because reading i is UB
  j = i; // undefined because reading i is UB
  a[i] = a[i]; // undefined because reading i is UB
  a[3] = a[3]; // undefined because reading a[3] is UB
  b[3] = a[3]; // undefined because reading a[3] is UB
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top