这个C代码是否会产生"未定义的行为"?

MrD*_*ase 1 c undefined-behavior

我正在阅读一篇有趣的文章"C和C++中未定义行为指南",第1部分,关于C和C++中未定义的行为.我经常在代码中执行以下操作:

int i = 10;
i = (++i) % 7;
Run Code Online (Sandbox Code Playgroud)

这会产生不确定的行为吗?在x86上?臂?也许这取决于编译器?

Mic*_*urr 8

它是未定义的行为,因为i在没有插入序列点的情况下被多次修改.

它仅取决于编译器,因为对代码的作用没有任何要求,因此每个编译器都可以做一些不同的事情.要清楚 - 只是因为即使你得到的结果似乎有意义(有时),代码也是一个错误.