title: Is using if (0) to skip a case in a switch supposed to work?
body: <p>I have a situation where I would like for two cases in a C++ switch statement to both fall through to a third case. Specifically, the second case would fall through to the third case, and the first case would also fall through to the third case <em>without</em> passing through the second case.</p>
  <p>I had a dumb idea, tried it, and it worked! I wrapped the second case in an <code>if (0) {</code> ... <code>}</code>. It looks like this:</p>
  <pre><code>#ifdef __cplusplus
  #  include &lt;cstdio&gt;
  #else
  #  include &lt;stdio.h&gt;
  #endif
  
  int main(void) {
      for (int i = 0; i &lt; 3; i++) {
          printf(&quot;%d: &quot;, i);
          switch (i) {
          case 0:
              putchar('a');
              // @fallthrough@
              if (0) {        // fall past all of case 1 (!)
          case 1:
              putchar('b');
              // @fallthrough@
              }
          case 2:
              putchar('c');
              break;
          }
          putchar('\n');
      }
      return 0;
  }
  </code></pre>
  <p>When I run it, I get the desired output:</p>
  <pre><code>0: ac
  1: bc
  2: c
  </code></pre>
  <p>I tried it in both C and C++ (both with clang), and it did the same thing.</p>
  <p>My questions are: Is this valid C/C++? Is it supposed to do what it does?</p>