这段代码有一个有趣的错误:顺序分配的评价(有没有发现我的第一个编译器错误?)
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”只显示一个错误?
我找不到在第一个代码片段中显示实现特定行为的任何内容;根据我的理解,后缀增量应该优先于赋值,并且赋值应该从右到左进行评估。第一个代码片段应该没有什么奇怪的,只是它有点不可读。
这不是一个编译器错误,它是一个程序员错误:代码涉及未定义的行为,因此无效C – Christoph 2010-03-03 12:00:40
http://catb.org/~esr/faqs/smart-questions.html#id382249 – 2010-03-03 12:03:44
我建议你谷歌上涨未定义的行为。 – 2010-03-03 12:04:46