This question already has answers here:
“Backwards” Conditionals in C [duplicate]

(4个答案)


4年前关闭。




最近,我一直在注意一些向后编写“if”语句的程序员的风格。也就是说,在测试中,他们首先将常量值放在其后,然后将其正在测试的变量放在第二位。因此,例如,他们写道:
bar = foo();
if (MY_CONSTANT == bar) {
    /*  then do something */
}

对我来说,这使代码有些难以阅读。由于我们实际上是在谈论测试变量“bar”的值,而不是测试所有等于“MY_CONSTANT”的变量,因此我总是将变量放在第一位。它是一种不言而喻的语法。

无论如何,我看到有些程序员总是以相反的顺序执行此操作。此外,我仅在过去几年中注意到这一点。我从事C编程已有25年以上,直到最近四年左右,我才看到它。所以我的问题是:

人们这样做是有原因的吗?这是某些语言或项目的通用标准,还是某些大学的教学标准?还是只有少数人试图变得与众不同?

最佳答案

这称为“Yoda样式”(或“Yoda条件”或“Yoda表示法”),应防止您意外书写

if (bar = MY_CONSTANT) {
    /*  then do something */
}

自从
if (MY_CONSTANT = bar) {
    /*  then do something */
}

会触发编译器错误。

该名称取自《星球大战》角色尤达(Yoda)也使用的不常见的扭曲句子构造。

我认为使用“Yoda-Style”会使对代码的理解更加困难,因为它违反了正常的句子构造规则。同样,代码质量检查器(或者如注释中提到的,甚至编译器本身)也应该提示这种分配,以便(恕我直言)没有充分的理由来混淆您的代码。

关于c - “if”语句的编码样式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36723200/

10-11 18:09