小编nuc*_*ear的帖子

C++ if 语句位于 switch 中的 case 之前

我的任务是为我的公司重写一些旧软件,并在源代码中发现了一个有趣的构造。

switch(X){
    if(Y==Z){
       case A: ... break;
       case B: ... break;
    }
    case C: ... break;
    default: ...;
}
Run Code Online (Sandbox Code Playgroud)

编译器警告我,if 语句中的代码将不会被执行,但在测试时似乎 if 语句未经过验证,但 case 语句却经过验证。

有没有什么原因,也许是早期的 C++ 时代,因为有些代码到现在已经有 20 多年的历史了,为什么你会编写这样的构造?它在生产代码中,所以它似乎确实做了一些事情?

如果我能像编译器那样忽略它,我将感谢任何内部原因。

编辑:它也发生了多次,所以它似乎不是一个简单的错误。这就是让我困惑的地方。

Edit2:这是我用于测试的示例。我不确定它有多大帮助,但是原始代码位于一个 1200 行的怪物函数中,因此从中创建一个基本上是不可能的。

for (int i=0; i<5;i++)
{
    switch(i)
    {
        if (i==0 || i ==1)
        {
            cout << "reached before case";
            case 0: cout << "inside case 0" << std::endl; break;
            case 1: cout << "inside case 1" << std::endl; break;
            case 2: cout << "inside case 2" …
Run Code Online (Sandbox Code Playgroud)

c++ if-statement case switch-statement

8
推荐指数
1
解决办法
514
查看次数

标签 统计

c++ ×1

case ×1

if-statement ×1

switch-statement ×1