gpt4 book ai didi

c - 在C中,在 'if'语句中,为什么要反转test的常量和变量,例如如果(10==val){}?

转载 作者:行者123 更新时间:2023-11-30 18:20:00 25 4
gpt4 key购买 nike

在C中,对于if语句,有时我们可以看到测试'值被放在要测试的变量之前,这可能会带来一些优化(GCC编译器),但是是哪一个呢? (但这会降低我认为的可读性)。

示例:

if ( 10 == val) {}

谢谢

最佳答案

它与优化无关,这是一个用来避免意外分配的技巧,它被称为 Yoda Convention or Yoda Conditions 。它可以防止意外分配,因为

if (value = 10)

会编译并将10分配给value,如果您的意思是if (value == 10),这不是您想要的(尽管有些编译器可以警告关于这一点并建议额外的括号以避免歧义),这个

if (10 = value)

不会。

由于编译器可以发出警告,并且当您经历过这是一个非常罕见的错误时,我建议不要这样做。因为读起来很困难,而且感觉不自然。因此要小心并使用正常条件,例如

if (value == 10)

为了安全起见,请在编译器中启用警告以防止意外分配。看到这相当于像尤达一样说话,like in this comment你可以明白为什么在自然语言中这是不舒服的,在代码中也是如此。

关于c - 在C中,在 'if'语句中,为什么要反转test的常量和变量,例如如果(10==val){}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039834/

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