当您使用Ada案例陈述时,每个案例都会自动中断。在C(或其他语言)中,不会自动执行此中断,并且执行真正的中断后的所有情况。是否也可以在Ada中使用此行为或解决方法?
答案 0 :(得分:10)
在Ada中永远不会有这样的行为!
唯一合理的workround是将重复的代码部分放入(本地)过程中,并在需要时调用它。
Ada的案例陈述就是这样的原因是C风格让人很容易忘记break
(添加/* FALLTHROUGH */
评论有意省略并不能使代码更容易阅读 - 一个没有注释的遗漏是一个错误?你需要阅读多少周围的代码才能确定?)。
在MISRA C(例如here)中,第60页底部附近的规则15.2说
无条件break语句应终止每个非空转换子句。
和Ada,打算在类似的市场上采取相同的立场。
大多数情况下,只需要一个动作的多种替代方案:
case K is
when 1 | 5 | 10 .. 20 =>
Action_1;
when 3 =>
Action_2;
...
end case;
答案 1 :(得分:7)
当然可以。但它是一种很少需要的行为,没有特定的语法提供它,所以你只需要自己使用低级原语进行滚动。
一种方法是使用标签和gotos,案例决策逻辑与声明逻辑完全分开,如此处所示。
sudo apt-get install libboost-dev
sudo apt-get install scons
sudo apt-get install python-scipy
sudo apt-get install python-numpy
sudo apt-get install libtbb-dev
是的,它很难看。如果你想在Ada中编写C语言,那将会很难看。