首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么C允许忽略块周围的支撑?

为什么C允许忽略块周围的支撑?
EN

Stack Overflow用户
提问于 2015-09-14 18:03:39
回答 7查看 992关注 0票数 9

我们中的大多数人可能都遇到了错误,当您在“if”中添加另一条语句时,注意到不管分支的条件如何,它都会打印,但是迟早会发现'if‘条件周围的大括号丢失了。

示例:

代码语言:javascript
运行
复制
if (condition) {
    statement;
}

与之相比:

代码语言:javascript
运行
复制
if (condition)
    statement;

请注意,我不想讨论什么编码标准更好,因为我们都有自己的观点,这在很大程度上取决于上下文。相反,我会感兴趣的是,从编程语言的角度来看,为什么不严格执行这些优点。它能使语法更简单吗?编译器实现?

让它成为可选的,而不是严格执行它有什么好处?标准是怎么说的?

EN

回答 7

Stack Overflow用户

发布于 2015-09-14 18:09:15

C标准规定if (expression)后面必须有一条语句。它不要求语句是复合语句。

在“C的精神”(见C的基本原理文件)中,一个短语是:

相信程序员。

另一方面,MISRA对if有一个必需的规则,并循环该语句必须是一个复合语句。

有些编码样式仅在语句与if放在同一行时才允许为if提供一条语句。例如:

代码语言:javascript
运行
复制
if (condition) statement;

请注意,C和C++不仅是使{}if中可选的语言。例如,在Java中,它也是可选的,但在Perl中它是必需的。

票数 15
EN

Stack Overflow用户

发布于 2015-09-14 18:20:49

因为:

  • 这将是过度干预-程序员选择编码风格,而不是语言;
  • 这将使语法更加复杂;简单地说,if (condition)后面跟着一个statement,然后让递归处理所有事情,就更容易、更健壮了。

就我个人而言,对于任何能力模糊的程序员来说,对这个构造的不信任很大程度上是没有价值的;我从来没有遇到过这样的"bug“,我忘记了如何编写C++,只是因为我选择了省略一个大括号对。如果你遇到它,我建议你把它当作一个提示,更多地关注你正在做的事情,而不是用“技巧”和“风格指南”来掩盖它。

票数 13
EN

Stack Overflow用户

发布于 2015-09-14 18:09:24

有时,不必编写大括号会使代码更具可读性:

代码语言:javascript
运行
复制
if (x < 0) throw std::invalid_argument("meh");
if (a != b) return 0;
if (i == k) continue;

理论上,您可以设计一种编程语言来要求除了控制流语句之外的大括号,但是这种安全性可能会被额外的语言复杂性所压倒。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32571075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档