首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >I= x[i]++;会导致未定义的行为吗?

I= x[i]++;会导致未定义的行为吗?
EN

Stack Overflow用户
提问于 2022-04-12 13:14:31
回答 3查看 176关注 0票数 4

请有人解释一下i = x[i]++;是否会导致未定义的行为?

注意:x[i]i都不是易失性的,x[i]不重叠i

这里有C11,6.5个表达式,2(重点是添加的):

如果对标量对象的副作用相对于同一标量对象上的不同副作用或使用相同标量对象值计算的值而言没有排序,则行为是未定义的。如果表达式的子表达式有多个允许的命令,则如果在任何顺序中发生这种未排序的副作用,则行为是未定义的。84)

据我所知:

没有“不同的副作用对同一个标量object"

  • there is no”值计算使用相同标量对象的值“

是否有“多个允许订货”?

总体上:如何解释i = x[i]++;。序列点、副作用和未定义的行为(如果有的话)?

UPD。结论:i = x[i]++;可引起2种不良反应:

“操作数对象的值递增”( increment)

  • "updating
  1. 左操作数的存储值)(赋值运算符)

标准没有定义副作用发生的顺序。

因此,根据C11,4.一致性,2:

未定义行为在本国际标准中以“未定义行为”一词表示,或通过省略对行为的任何明确定义表示

实验表明,GCC/LLVM/ICC具有顺序1-2,而MSVC (及其他一些)具有顺序2-1

额外的(推测):为什么不使它不明确的行为?示例:“未指定行为的一个示例是副作用发生的顺序”?

EN

Stack Overflow用户

发布于 2022-04-12 13:38:52

想象一下:

代码语言:javascript
运行
复制
i = 3;
x[] = {1, 1, 1, 1, 1};

因此,x[i] = 1,x[i]++ =2,x变为{1, 1, 2, 1, 1}i变为1。

为什么会有不明确的行为呢?

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71843405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档