是否有关于“i=i--”行为的具体文档?在海湾合作委员会?
再次,我们最喜欢的“i=i--”之类的问题。在 C99 中我们有:
6.5 表达式 #2:上一个序列点和下一个序列点之间 对象应有其存储值 最多修改一次
70) 本段呈现 !!不明确的!!语句表达式 比如
i = ++i + 1;
但是对于未定义的行为,可能存在从随机输出到“以记录方式执行程序”的变体(c99 3.4.3)
因此,问题是:
gcc 是否记录了 i=i++ 的行为, i=i--等等语句?
实际代码是
int main(){int i=2;i=i--;return i;}
Once again, our best loved "i=i--" -like issues. In C99 we have:
6.5 Expressions #2: Between the previous and next sequence point an
object shall have its stored value
modified at most once70) This paragraph renders
!!undefined!! statement expressions
such as
i = ++i + 1;
But for undefinded behavior there can be variants from random output to "program execution in a documented manner" (c99 3.4.3)
So, the question:
Does gcc document the behavior for i=i++, i=i--, and so on statements?
Actual code is
int main(){int i=2;i=i--;return i;}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你到底为什么要这么做?严重地。我很好奇。
why on earth would you want to do that? Seriously. I'm curious.
GCC 没有记录此行为。 警告选项页面提到了
-Wsequence 中的序列点问题-point
,但没有暗示明确定义的违规语义。GCC 确实有一个很好的 C 列表实现定义的行为,但我在这里也找不到任何对此问题的参考。
GCC does not document this behaviour. The Warning Options page mentions sequence points issues in
-Wsequence-point
, but does not hint at well-defined sematics for violations.GCC does have a nice list of C Implementation Defined Behaviour, but I could not find any reference to this issue here either.
由后端实现来决定它的作用。您可以使用
-S
并检查生成的代码以确定事件的确切顺序。It's left to the back-end implementation to decide what it does. You can use
-S
and inspect the generated code to determine the exact sequence of events.它没有记录,但即使有,我也不想读它。当遇到未定义的行为时,您永远不应该依赖特定实现的功能。
It is not documented but even it it was, I wouldn't want to read it. You should never rely on what a particular implementation does when running into undefined behavior.