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

Pas*_*yon -1 c gcc compiler-optimization

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

例:

if ( 10 == val) {}
Run Code Online (Sandbox Code Playgroud)

谢谢,

Iha*_*imi 5

它与优化无关,它是用于避免意外分配的技巧,它被称为Yoda Convention或Yoda Conditions.它可以防止意外分配,因为

if (value = 10)
Run Code Online (Sandbox Code Playgroud)

value如果你的意思是编译并将分配10 不是你想要的if (value == 10)(虽然一些编译器可以警告这个并建议额外的括号以避免歧义),这

if (10 = value)
Run Code Online (Sandbox Code Playgroud)

不会.

由于编译器可以发出警告,并且当您有经验时,这是一个非常罕见的错误,我会建议不要这样做.因为它很难阅读而且感觉不自然.所以要小心并使用正常条件

if (value == 10)
Run Code Online (Sandbox Code Playgroud)

为了安全起见,在编译器中启用警告以防止意外分配.看到这相当于像Yoda 一样说话,就像在这个评论中你可以看到为什么在自然语言中这是不舒服的,它在代码中也是如此.