title: Are multi-character character constants valid in C? Maybe in MS VC?
body: <p>While reviewing some WINAPI code intended to compile in MS Visual C++, I found the following (simplified):</p>
  
  <pre><code>char buf[4];
  
  // buf gets filled ...
  
  switch ((buf[0] &lt;&lt; 8) + buf[1]) {
      case 'CT':
          /* ... */
  
      case 'SY':
          /* ... */
  
      default:
          break;
  
      }
  }
  </code></pre>
  
  <p>Assuming 16 bit chars, I can understand why the shift of <code>buf[0]</code> and addition of <code>buf[1]</code>. What I don't gather is how the comparisons in the case clauses are intended to work.</p>
  
  <p>I don't have access to Visual C++ and, of course, those yield <code>multi-character character constant [-Wmultichar]</code> warnings on gcc/MingW.</p>