该程序是否有任何序列点问题?
#include<stdio.h>
int main()
{
int i=7,j;
j=(i++,++i,j*i);
return 0;
}
j=(i++,++i,j*i);这个定义明确吗?让我澄清一下我的疑问。
#include<stdio.h>
int main()
{
int i=7,j;
j=(i++,++i,j*i);
return 0;
}
j=(i++,++i,j*i);Is this well defined ? Let me clear my doubt.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个表达式没问题,因为 逗号运算符 是一个 序列点:
但是,不要将其与以下内容混淆,其中逗号不充当序列点:
乘法运算符不是序列点。
(请原谅我劫持您的答案)
来自 ISO 9899:1999(C 标准)的 §3.4:
This expression is OK because the comma operator is a sequence point:
However do not confuse it with the following where the comma is not acting as a sequence point:
The multiplication operator is not a sequence point.
(Excuse me hijacking your answer)
From §3.4 of ISO 9899:1999 (C Standard):
是的,它定义得很好。
序列点
C 中的逗号运算符
Yes, It's well defined.
sequence point
comma operator in C
在您的代码中,“,”将作为序列点。
所以在这个
表达式中将从左到右工作。
所以首先 i++ 然后 ++i 然后 j*i
最后 j*i 将存储在 j 中;
但最后你的结果会很优雅,因为“ j ”没有预定义的数据
因此未定义的值将存储在 j 中。
如果您不使用“ () ”,
您的代码将作为单个语句工作,例如
In your code " ," will be work as sequence point.
so in this
expression would be work from left to right.
so at first i++ then ++i and then j*i
at the last j*i would be stored in j;
but lastly your result would be elegant because " j " have no predefined data
so undefined value would be stored in j.
if you don't use " () "
your code would be work as single statement such as