And*_*eas 9 c syntax programming-languages
我们大多数人可能遇到过这样的错误:当你在'if'中添加另一个语句并注意到它打印时不管分支的条件如何,只是为了及时发现挫折中的'if'条件周围的括号失踪.
例:
if (condition) {
statement;
}
Run Code Online (Sandbox Code Playgroud)
相比:
if (condition)
statement;
Run Code Online (Sandbox Code Playgroud)
请注意,我不想讨论哪种编码标准更好,因为我们都对此有所了解,而且它非常依赖于上下文.相反,我会对编程语言的优势和这些优势感兴趣,为什么决定不严格执行.它是否使语法更简单?编译器实现?
保留它是可选的,而不是严格执行它的优点是什么?标准对此有何评价?
oua*_*uah 15
C标准说if (expression)
必须跟着一个声明.它不要求语句是复合语句.
在"C的精神"(参见C Rationale文件)中,其中一个短语是:
相信程序员.
另一方面,MISRA-C有一个必需的规则,if
并且循环声明必须是复合语句.
一些编码样式只允许单个语句,if
只有当语句放在与...相同的行中时if
.例如:
if (condition) statement;
Run Code Online (Sandbox Code Playgroud)
请注意,C和C++不仅{}
是可选的语言if
.例如,在Java中它也是可选的,但在Perl中它是必需的.
Lig*_*ica 13
因为:
这将是过度干预 - 程序员选择编码风格,而不是语言;
它会使语法进一步复杂化; 更简单,更健壮,只需说if (condition)
a后跟a statement
,让递归处理所有内容.
就个人而言,我发现对这种结构的不信任对任何模糊的程序员来说都是没有价值的; 我没有遇到过这个"bug",因为我选择省略一对括号,我忘记了如何编写C++.如果你碰到它,我建议你把它视为一个提示,要更多地关注你正在做的事情,而不是用"技巧"和"风格指南"掩盖它.
有时候,不必编写大括号就会使代码更具可读性:
if (x < 0) throw std::invalid_argument("meh");
if (a != b) return 0;
if (i == k) continue;
Run Code Online (Sandbox Code Playgroud)
理论上,除了控制流语句之外,您可以设计一种编程语言来要求括号,但这种安全性可能会被额外的语言复杂性所抵消.