このコードには興味深いバグがあります:
some_struct struct_array1[10] = {0};
some_struct struct_array2[10] = {0}
int i;
for (i = 0;
i < sizeof(struct_array1) / sizeof(struct_array1[0]);
struct_array1[i].value = struct_array2[i++].value = 1)
;
ほとんどのコンパイラでは、上記のコードにより、それぞれの配列内のすべての構造体の「値」フィールドが 1 に設定されます。ただし、ある特定のコンパイラ (xcc と呼びましょう) では、struct_array1 の構造体が正しく初期化されません。「値」フィールドはすべての構造体で 0 に設定されていますが、これにはちょっと驚きました。
次のコード スニペットは、すべてのコンパイラで期待どおりに機能します。
for (i = 0;
i < sizeof(struct_array1) / sizeof(struct_array1[0]);
i++)
{
struct_array1[i].value = struct_array2[i].value = 1;
}
さて、私は完全にここから離れていますか、それとも問題のあるコンパイラ「xcc」が単にバグを表示しているだけなのでしょうか?
最初のコード スニペットで実装固有の動作を示すものは見つかりません。私が理解していることから、後置インクリメントは割り当てよりも優先され、割り当ては右から左に評価されるべきです。最初のコード スニペットは、少し読みにくいことを除けば、おかしなことは何もないはずです。