Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C “的编码样式”;如果;声明_C_Coding Style - Fatal编程技术网

C “的编码样式”;如果;声明

C “的编码样式”;如果;声明,c,coding-style,C,Coding Style,最近我注意到一些程序员向后写“if”语句的风格。也就是说,在测试中,他们先把常量值放在第一位,然后再把测试的变量放在第二位。例如,他们写道: bar = foo(); if (MY_CONSTANT == bar) { /* then do something */ } 对我来说,这使得代码有点难以阅读。因为我们真正讨论的是测试变量“bar”的值,而不是所有等于“MY_常量”的变量,所以我总是把变量放在第一位。这有点像一种潜语法 无论如何,我看到一些程序员总是以相反的顺序来做这件事。

最近我注意到一些程序员向后写“if”语句的风格。也就是说,在测试中,他们先把常量值放在第一位,然后再把测试的变量放在第二位。例如,他们写道:

bar = foo();
if (MY_CONSTANT == bar) {
    /*  then do something */
}
对我来说,这使得代码有点难以阅读。因为我们真正讨论的是测试变量“bar”的值,而不是所有等于“MY_常量”的变量,所以我总是把变量放在第一位。这有点像一种潜语法

无论如何,我看到一些程序员总是以相反的顺序来做这件事。此外,我只是在过去几年才注意到这一点。我已经用C语言编程超过25年了,直到,比如说,在过去的4年左右,我才看到这一点。所以我的问题是:

人们这样做有什么原因吗?如果有,原因是什么?这是一些语言或项目的共同标准,还是在一些大学教授?或者这只是少数人试图与众不同?

这被称为“尤达风格”(或“尤达条件”或“尤达符号”),应该可以防止你无意中写作

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

if (MY_CONSTANT = bar) {
    /*  then do something */
}
将触发编译器错误

这个名字来源于《星球大战》中的人物尤达所使用的不同寻常的扭曲句子结构

在我看来,使用“尤达风格”会使理解代码更加困难,因为它违反了正常的句子结构规则。另外,代码质量检查器(或者在注释中提到的,甚至可能是编译器本身)应该抱怨这样的赋值,所以(imho)没有很好的理由混淆代码

这被称为“尤达风格”(或“尤达条件”或“尤达符号”),应该可以防止您意外书写

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

if (MY_CONSTANT = bar) {
    /*  then do something */
}
将触发编译器错误

这个名字来源于《星球大战》中的人物尤达所使用的不同寻常的扭曲句子结构


在我看来,使用“尤达风格”会使理解代码更加困难,因为它违反了正常的句子结构规则。另外,代码质量检查器(或者在注释中提到的,甚至可能是编译器本身)应该抱怨这样的赋值,所以(imho)没有很好的理由混淆代码

这是一种最佳实践,大约15年前有人认为最好。所谓的好处是它可以防止某人做意外的任务而不是比较


这是可疑的,因为任何值得使用的编译器都会警告分支运算符中的赋值,但成群结队的旅鼠仍然在模仿最佳实践,甚至没有考虑它的含义和用途。

这是一种最佳实践,大约15年前有人认为是最好的。所谓的好处是它可以防止某人做意外的任务而不是比较



它在过去是可疑的,现在是100%没有意义的,因为任何值得使用的编译器都会警告分支运算符中的赋值,但成群的旅鼠仍然复制最佳实践,甚至没有考虑它的含义或用途。

我希望这个问题的答案会更有价值。顺便说一下,是这样做的最空洞的原因之一,因为有能力的编译器(或linter)会警告条件中的赋值。@Rhymoid的人倾向于忽略编译器警告。这是唯一和充分的理由。顺便说一句,由于构造是完全合法的,因此没有理由让符合标准的编译器对此发出警告。@EugeneSh。当你总是
-Wall-Werror
时,你真的不能再忽视这个警告了,这应该是所有生产代码的默认值。@Rhymoid“应该是”和“实际上是”通常是两个不同的野兽…我希望这个问题的答案会更有价值。顺便说一句,这是最愚蠢的原因之一,因为有能力的编译器(或linter)会对条件中的赋值发出警告。@Rhymoid的人倾向于忽略编译器警告。这是唯一和充分的理由。顺便说一句,由于构造是完全合法的,因此没有理由让符合标准的编译器对此发出警告。@EugeneSh。当你总是
-Wall-Werror
时,你真的不能再忽略警告了,这应该是所有生产代码的默认值。@Rhymoid“应该是”和“实际上是”通常是两种不同的野兽…@vlad_tepesch解释了为什么会出现这种风格;但使用与否主要是个人观点和风格的问题。尤达-不使用你的情况应该如此。它们是古老的,而现代的编译器已经将其用于正常的秩序。我不认为这一切都是最近的。大学的联系也许可以解释为什么它会永久存在。教授们对一次又一次地处理同一个错误感到厌倦,而犯下这个错误的学生不太可能听从编译器的警告。教学生这样写可以节省教授调试学生代码的一点时间。@johncleman:在像公司这样的专业环境中,这样的代码越来越被拒绝,因为编译器会在超过10年后发出警告。教学生使用它们是错误的方法。更简单、更常见的做法是拒绝生成启用常见警告的诊断代码。更有可能的是,这位教授曾经以这种方式学习过,只是保持了这种习惯。可悲的是,大多数教授不喜欢学习他们感兴趣的领域不需要的新技巧。我从未见过尤达斯拒绝。实际上,我更喜欢它们,而不是“正常”构造,它偶尔会将实际情况从我的“编辑/调试器”窗口的rhs中推出来,因为这是对某个系统调用结果的检查,其中包含13个参数。@vlad_tepesch解释了为什么会出现这种样式;但使用与否主要是个人观点和风格的问题。尤达-不使用你的条件