gpt4 book ai didi

c - 未定义的操作

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:37 24 4
gpt4 key购买 nike

我今天在摆弄代码块,收到一条奇怪的警告消息。这不是一个错误,它编译并运行了预期的结果,但警告消息激起了我的好奇心。

代码:

while (i < right)
*(array + i) = *(buffer - left + i++);

while (i >= 0 && *(array + i) > key)
*(array + i + 1) = *(array + i--);

给我的错误信息如下:

warning: operation on 'i' may be undefined

但是类似的代码:

if (l < left + middle &&
(r == right || min == *(array + l)))
*(buffer + i) = *(array + l++);
else
*(buffer + i) = *(array + r++);

没有产生警告信息。请注意,所有片段都来自同一个项目/文件。

最佳答案

赋值运算符不会产生序列点。因此,这一行:

    *(array + i + 1) = *(array + i--);

访问/修改 i 两次,没有中间序列点。那是您被警告的未定义行为。语言不保证您将为左侧的 i 获得的值。

关于c - 未定义的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728454/

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