2011-05-14 80 views
0

我正在阅读一篇有趣的文章A Guide to Undefined Behavior in C and C++, Part 1关于C和C++中未定义的行为。通常我在我的代码中执行以下操作:这个C代码是否产生“未定义的行为”?

int i = 10; 
i = (++i) % 7; 

这是否会产生未定义的行为?在x86上?臂?也许这取决于编译器?

+4

http://c-faq.com/expr/seqpoints.html – Nyan 2011-05-14 02:54:04

+0

也可以看看这个[FAQ条目](http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points) 。 – 2011-05-14 03:32:37

回答

7

这是不确定的行为,因为i被修改,不止一次没有插入顺序点。

它仅仅依赖于编译器,因为没有关于代码的作用的要求,所以每个编译器都可以做一些不同的事情。要清楚 - 只是因为即使你得到的结果似乎有意义(有时),代码是一个错误。

+0

对于正确答案+1,它被卡在底部正确答案的下方(包括被接受的答案......) – 2011-05-14 03:27:16

1
+2

不希望编译器产生任何一致的结果 - 你可以在不确定的行为的不同运行的代码中得到不同的结果。对于这个特殊的UB来说这可能有些不太可能,但是没有任何期望。 – 2011-05-14 03:03:03

+0

@迈克尔感谢您指点,我站得更正了。将在答案中包含更多细节。 – YetAnotherUser 2011-05-14 03:11:23

相关问题