如何在SW发布中添加新参数时处理“切换/大小写”

时间:2011-05-20 04:01:56

标签: c++ c switch-statement

如何在某个时间有新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语句来实际检查吗?还有更好的主意吗?

5 个答案:

答案 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!