问题标签 [control-flow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
437 浏览

c - 静态变量优化的 C 分支

让我先说我没有分析此代码,也不是关键路径。这主要是出于我自己的好奇心。

我有一个函数将静态 int 声明/定义为已知错误值,这将导致代码采用分支。但是,如果函数成功,我可以肯定地知道该分支将永远不会再被采用。是否有编译时优化?特别是 GNU/gcc/glibc?

所以我有这个:

因此,一旦函数成功完成(如果此函数返回 null,我将退出程序),我知道 fd 对于所有未来的调用都是有效的,并且永远不会采用第一个分支。我知道有 __builtin_expect() 宏,所以我可以写

但据我了解,这只是对编译器的提示,它仍然必须执行条件检查。而且我还意识到,在 99.9999% 的情况下,它已经绰绰有余,因此任何进一步的性能提升都可以忽略不计。

我想知道是否有办法在第一次运行后甚至阻止第一次条件检查( fd <0 )。

0 投票
2 回答
232 浏览

scala - 如何从 Scala 中的方法体外部实现提前返回?

免责声明:在有人说之前:是的,我知道这是不好的风格,不被鼓励。我这样做只是为了使用 Scala 并尝试了解更多关于类型推断系统如何工作以及如何调整控制流的信息。我不打算在实践中使用此代码。


所以:假设我在一个相当长的函数中,一开始有很多连续的检查,如果它们失败,都应该导致函数返回一些其他值(而不是抛出),否则返回正常值. 我不能returnFunction. 但是我可以模拟吗?有点像break在模拟scala.util.control.Breaks

我想出了这个:

我在这里的检查显然是假的,但重点是我想避免这样的事情,真正有趣的代码最终过于嵌套,不符合我的口味:

我的解决方案在这里运行良好,如果我愿意,我可以提前返回 4 作为返回值。麻烦的是,我必须显式地编写类型参数[Int]——这有点痛苦。有什么办法可以解决这个问题吗?

0 投票
0 回答
153 浏览

language-agnostic - 在控制流图的路径中搜索

很多时候,我在函数中打印时遇到问题foo,我想查找Print在控制流图中可以从函数中访问的代码中的所有出现foofoo或者在and之间的路径中的所有代码中bar(因为我在调用之前验证了一个假设是正确的foo,并且在我到达之后是错误bar的,所以我想找出两者之间发生了什么)。

有什么工具可以让我轻松做到这一点。我不会用CIL编译我所有的 C 代码,而是编写一个 OCaml 模块来使用 CFG 进行搜索。我想要一些麻烦最少的东西。

Eclipse CDT 应该能够做到这一点(您可以使用 计算 CFG show function hiererchy),但我在那里没有找到类似的东西。

我现在的目标是 C/C++,但我会很高兴听到类似的工具?我不确定CQL是否有办法表达这一点。

0 投票
2 回答
1318 浏览

java - Antlr - 控制流图

是否可以使用 Antlr 为 Java 程序构建控制流图?是否有任何资源可以提供这样做的指导?有没有比使用 Antlr 更好的方法,或者是否有任何类型的 Eclipse 工具可以提供帮助?

0 投票
2 回答
13685 浏览

ssis - 如何根据存储过程输出停止包执行?

我有一个 SSIS 包,第一个任务执行一个存储过程来验证运行日期不是假期。如果是假期,则返回计数为 1 的记录集。

如果记录计数为 1,我希望能够停止 SSIS,但如果记录计数为零,则继续运行。我不知道实现这一点的最佳方法。我应该在包中添加什么控制流项?

我对 SSIS 比较陌生,所以我不知道要添加什么项目。任何帮助都会很棒。

0 投票
4 回答
1674 浏览

c++ - GCC中枚举开关控制流分析不足

在以下 C++ 代码中:

使用 编译时会发出警告-Wall,表示控件到达非 void 函数的末尾。为什么?


编辑

test示例中的变量可以包含任何值通常是不正确的。

foo(12354)不编译:

因为 12354 不是一个有效值Test(尽管它在纯C确实有效,但它不在 C++ 中)。

您确实可以将任意整数常量显式转换为枚举类型,但这不被认为是未定义的行为吗?

0 投票
2 回答
931 浏览

php - 单元测试:特定测试和控制流程

我对单元测试和一般测试很陌生。我正在使用 phpUnit 进行开发,但由于我的问题更笼统/设计问题,实际环境不应该太重要。

我认为,尽可能具体地编写测试用例是一种很好的做法。例如(越晚越好):

如果这是正确的,这是我的问题

如果正在测试的对象的状态取决于外部源(即数据库),甚至一般情况下,在测试用例中编写一些流控制是一种公认​​的做法吗?

喜欢:

测试用例中的这种流控制是可以接受的还是“代码味道”并且应该被规避?如果可以,是否有任何提示或做法,这里应该牢记在心?

0 投票
5 回答
350 浏览

c - C 预处理器流控制取决于函数参数

我想做的是这样的

以便

将在输出的三重循环内产生 printf 和

会产生 SOME_OTHER_CODE 这可能吗?

0 投票
2 回答
334 浏览

functional-programming - 可以使用“call/cc”实现“if”吗?

有人告诉我“call/cc”可用于实现任意控制流构造,所以我尝试使用“call/cc”来实现所有此类构造,但我遇到了麻烦。假设我没有“if”,我将如何使用“define-syntax”和“call/cc”来实现它?有可能还是我被误导了?我知道如何使用“call/cc”实现无条件跳转,但在机器级别,条件执行是使用分支指令执行的,分支指令的执行取决于处理器的状态位。如果没有这种类型的构造,我看不到它是如何完成的。

0 投票
2 回答
5256 浏览

scala - Scala 中的非本地返回是新的吗?

一位同事刚刚向我展示了这个,我很惊讶它完全编译:

这甚至有效:

我认为return从内部封闭是不允许的。这从什么时候开始起作用了?这种非本地回报是否有警告?