以下代码出现在this question中:
int k = 0;
while(+(+k--)!=0)
k=k++;
语句k=k++
如果被执行,无疑会调用undefined behavior,因为k
的读取和写入操作都没有序列点。但是,在上面的代码中,从未输入循环的主体,因此不会执行有问题的语句。
问题是,这是否会导致整个程序未定义?在这种情况下:
if (x != NULL)
*x = 4;
如果*x = 4;
为NULL,则语句x
只会导致未定义的行为。但是对于k=k++
,它始终是未定义的。
所以问题是如何期望编译器处理这样的代码?即使语句不执行,它也会自动使整个程序无效吗?