这段代码有一个有趣的错误:
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”只是显示了一个错误?
我在第一个代码片段中找不到任何显示特定于实现的行为的东西;据我了解,后缀递增应该优先于分配,并且分配应该从右到左进行评估。第一个代码片段应该没有什么奇怪的,除了它有点不可读。