即使未执行,i = i ++也会导致未定义的行为吗?

时间:2019-11-01 15:07:00

标签: c language-lawyer

以下代码出现在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++,它始终是未定义的。

所以问题是如何期望编译器处理这样的代码?即使语句不执行,它也会自动使整个程序无效吗?

0 个答案:

没有答案