C中潜在的未定义行为

Ale*_*a K 1 c

我需要知道以下代码是否可能是未定义的行为(我很确定它是):

int main(){
   int z=53;
   z=z<<=3;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是课堂测试中的一个问题.我告诉老师我以为是UB,但我的老师不相信我.

Grz*_*ski 6

这是未定义的.致N1256,C99草案,第6.5/2条(强调我的):

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.72)此外,先前值应只读以确定要存储的值.73)