gpt4 book ai didi

c - 是 a[i]=y++; a[i++]=y;未定义的行为或未在 C 语言中指定?

转载 作者:行者123 更新时间:2023-12-05 08:28:46 25 4
gpt4 key购买 nike

当我在寻找表达式v[i++]=i;为什么要定义行为时,突然看到一个解释,因为该表达式存在于程序中的两个序列点之间,并且c标准规定在两个序列点中副作用的出现顺序是不确定的,所以在程序中运行表达式时,并不确定++操作符是否先操作或者首先操作 = 运算符。我对此感到困惑。当表达式求值的过程中,是不是应该先用优先级判断,再引入序列点来判断先执行哪个子表达式呢?我错过了什么吗?

user AnT stands with Russia explained it like this ,是不是意味着在程序中写a[i]=y++;或者a[i++]=y;这样的代码不能确定++ 运算符和= 运算符无法确定谁先运行。

最佳答案

v[i++]=i; 是未定义行为的原因是因为变量 i 是在同一个表达式中读取和写入的,没有排序。

a[i]=y++a[i++]=y 等表达式不会表现出未定义的行为,因为没有变量在表达式中同时读取和写入测序。

不过,= 运算符确实确保在分配给左侧的副作用之前,它的两个操作数都已完全求值。具体来说,a[i] 被评估为指定数组 a 的第 i 个元素的左值,以及 y++ 被评估为 y当前值。

关于c - 是 a[i]=y++; a[i++]=y;未定义的行为或未在 C 语言中指定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75109897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com