如何在某个时间有新SW版本时处理,并为switch case
添加另一个索引。索引代表这种情况下的参数。例如,
Rel1:i = 1-5,7(不包括6)
Rel2:i = 1-7
for (int i = 1; i<=7;i++)
{
switch (i)
{
case 1: /*process data*/ break;
case 2: /*process data*/ break;
case 3: /*process data*/ break;
case 4: /*process data*/ break;
case 5: /*process data*/ break;
// case 6: // REL 2
case 7: /*process data*/ break;
default: break;
}
}
我可以通过在这些案例之间添加if
语句来实际检查吗?还有更好的主意吗?
答案 0 :(得分:3)
#define
哪个版本是这个,然后使用#ifdef
。
switch (i)
{
case 1: /*process data*/ break;
case 2: /*process data*/ break;
case 3: /*process data*/ break;
case 4: /*process data*/ break;
case 5: /*process data*/ break;
#ifdef REL_2
case 6: /*process data*/ break; // <-- executed only for REL_2
#endif
case 7: /*process data*/ break;
default: break;
}
答案 1 :(得分:1)
在生产代码中,如果我有这样的意外结果,我经常尝试捕获并记录它。 抛出异常可能可以正常,具体取决于它的处理方式。为了面向未来,设计这样的东西以优雅地处理新值通常是好的。
答案 2 :(得分:0)
不使用'for'循环,而是使用带有版本号生成器功能的'while'循环。
伪代码:
typedef enum {rel1, rel2} rel_t;
// Where 'ReleaseSequence' is a generator functor. Class that takes rel_t
// in constructor and creates an appropriate functor that returns the
// required sequence of numbers for a particular release
ReleaseSequence seq(rel1);
while (i = seq()) {
switch (i) {
case 1:...
case 2:...
case 3:...
case 4:...
case 5:...
case 6:...
case 7:...
default:
break;
}
}
答案 3 :(得分:0)
我发现在循环中嵌套switch
非常奇怪......
看起来你正在执行一个管道。那你为什么不简单地定义为一个。
例如,一个简单的函数指针数组就可以了。您可以为每个版本定义一个这样的管道,并为要忽略的参数提供“noop”函数。
答案 4 :(得分:0)
如果您想捕获意外值,请不要将该检查放在default
部分?
...
default:
assert(false); // We should never get here!