我正在阅读一篇有趣的文章A Guide to Undefined Behavior in C and C++, Part 1关于C和C++中未定义的行为。通常我在我的代码中执行以下操作:这个C代码是否产生“未定义的行为”?
int i = 10;
i = (++i) % 7;
这是否会产生未定义的行为?在x86上?臂?也许这取决于编译器?
我正在阅读一篇有趣的文章A Guide to Undefined Behavior in C and C++, Part 1关于C和C++中未定义的行为。通常我在我的代码中执行以下操作:这个C代码是否产生“未定义的行为”?
int i = 10;
i = (++i) % 7;
这是否会产生未定义的行为?在x86上?臂?也许这取决于编译器?
这是不确定的行为,因为i
被修改,不止一次没有插入顺序点。
它仅仅依赖于编译器,因为没有关于代码的作用的要求,所以每个编译器都可以做一些不同的事情。要清楚 - 只是因为即使你得到的结果似乎有意义(有时),代码是一个错误。
对于正确答案+1,它被卡在底部正确答案的下方(包括被接受的答案......) – 2011-05-14 03:27:16
是 - 按照标准ISO C.
Though, a compiler is expected to produce consistent result.
不希望编译器产生任何一致的结果 - 你可以在不确定的行为的不同运行的代码中得到不同的结果。对于这个特殊的UB来说这可能有些不太可能,但是没有任何期望。 – 2011-05-14 03:03:03
@迈克尔感谢您指点,我站得更正了。将在答案中包含更多细节。 – YetAnotherUser 2011-05-14 03:11:23
http://c-faq.com/expr/seqpoints.html – Nyan 2011-05-14 02:54:04
也可以看看这个[FAQ条目](http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points) 。 – 2011-05-14 03:32:37