【问题标题】:"continue" and "break" for static analysis [closed]静态分析的“继续”和“中断”[关闭]
【发布时间】:2012-05-17 15:12:51
【问题描述】:

我知道,关于 break 和 continue 是否应该被视为一般有害的讨论已经进行了许多讨论(底线或多或少取决于它;在某些情况下,它们可以提高清晰度和可读性,但在其他情况下他们没有)。

假设一个新项目正在开始开发,计划进行夜间构建,包括通过静态分析器运行。它是否应该成为项目编码指南的一部分,以避免(或强烈反对)使用continuebreak,即使它会牺牲一点可读性并需要过多的缩进?我最感兴趣的是这如何应用于 C 代码。

本质上,这些控制运算符的使用是否会使代码的静态分析显着复杂化,从而可能导致额外的假阴性,否则如果不使用 break 或 continue 则会记录潜在的错误?

(当然,证明任意程序正确性的完整静态分析是一个无法确定的命题,因此请保留有关您所拥有的任何实践经验的回复,而不是理论上的不可能)

提前致谢!

【问题讨论】:

  • 我认为这种问题更适合程序员(programmers.stackexchange.com)论坛而不是stackoverflow ...
  • 根据我的[有限]经验,程序员 SE 通常不会提供与 SO 相同的详细技术响应,这就是为什么我认为 SO 会是更好的选择。有没有办法让我把它迁移到那里,而不仅仅是交叉发布?

标签: c static-analysis break continue


【解决方案1】:

我的直接反应是,为了避免 breakcontinue 而必须跳过的圈子可能会损害整个代码,并使静态分析(或其他任何事情)变得更加困难。

不过,这在一定程度上取决于您正在处理的代码的确切类型。举个例子,如果你有一些东西最好用switch 语句来实现,禁止break 基本上会迫使你使用嵌套的if/elses,这会使代码变得更加困难正确分析,并根据具体情况,很可能会对输出代码产生负面影响。

【讨论】:

  • 许多嵌套的if/elses 可能需要更多时间供人类解析,但我认为静态分析器要简单得多?
  • @B.VB.:如果您正在编写自己的静态分析器,那么如果您省略一些语言功能,可能会更简单一些,是的。对于现有的静态分析器,它不太可能产生任何真正的影响。如果您确实想简化语言,那么这些可能不是正确的起点。
  • +1。如果您正在编写自己的静态分析工具并希望简化 C++ 以使您的(其他)工作更轻松,为什么不弃用需要更多实现工作的类、函数和所有其他功能呢?使用现有的工具,不要切断你的右臂来帮助你的左臂。
猜你喜欢
  • 2010-12-30
  • 1970-01-01
  • 2017-01-19
  • 2012-12-02
  • 2012-08-11
  • 1970-01-01
  • 2023-03-14
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多