gpt4 book ai didi

c - gcc 和 C if 语句中的操作顺序

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

我有一行代码看起来像这样:

if ((!s2->lines[i]->flags & ML_TWOSIDED) || (s2->lines[i]->backsector == s1))

gcc 给我说:

警告:建议在“!”的操作数周围加上括号,或将“&”更改为“&&”或将“!”更改为“~”[-Wparentheses]

所以,我很好奇,因为它确实可以编译,gcc 在做什么?是不是整个第一段,还是只有 s2->lines[i]->flags

换句话说,gcc 假设:

if (!(s2->lines[i]->flags & ML_TWOSIDED) || (s2->lines[i]->backsector == s1))

if (((!s2->lines[i]->flags) & ML_TWOSIDED) || (s2->lines[i]->backsector == s1))

或者别的什么?

最佳答案

是的,gcc 假设你的意思是

if (((!s2->lines[i]->flags) & ML_TWOSIDED) || (s2->lines[i]->backsector == s1))

因为语言的优先规则就是这么说的。但由于这几乎肯定不是您想要的,因此 gcc 建议您编写

if ((!(s2->lines[i]->flags & ML_TWOSIDED)) || (s2->lines[i]->backsector == s1))

相反。

关于c - gcc 和 C if 语句中的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36817783/

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