Ada Case Statement的行为与C类似吗?

时间:2016-12-10 12:04:17

标签: case break ada

当您使用Ada案例陈述时,每个案例都会自动中断。在C(或其他语言)中,不会自动执行此中断,并且执行真正的中断后的所有情况。是否也可以在Ada中使用此行为或解决方法?

2 个答案:

答案 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语言,那将会很难看。