Oracle Solaris Studio 12.2: C ユーザーガイド

2.7 Switch 文内の Case 範囲

標準 C では、switch 文内にある case のラベルに、ただ 1 つの値を関連付けることができます。Solaris Studio C では、case 範囲として知られる、一部のコンパイラに見られる拡張を許可しています。

case 範囲は、値範囲を指定し、個別の case のラベルに関連付けます。case 範囲の構文は、次のとおりです。

case low ... high:

case 範囲は、lowhigh で指定された範囲内にある各値に対して case ラベルを指定した場合とまったく同じ動作をします (low high が等しい場合は、case 範囲はただ 1 つの値を指定します)。下限と上限の値は、C 規格の要件に準拠している必要があります。つまり、これらの値は、有効な整数型の定数式であることが必要です (C 規格 6.8.4.2)。case 範囲と case ラベルは、自由に混在することができ、単一の switch 文内で複数の case 範囲を指定できます。

プログラミングの例:


enum kind { alpha, number, white, other }; 
enum kind char_class(char c); 
{     
     enum kind result;
     switch(c) {
         case 'a' ... 'z':
         case 'A' ... 'Z':
             result = alpha;
             break;
         case '0' ... '9':
             result = number;
             break;
         case ' ':
         case '\n':
         case '\t':
         case '\r':
         case '\v':
             result = white;
             break;
         default:
             result = other;
             break;
     }
     return result; }  

case ラベルに関する既存の要件に対してエラー条件を追加:

case 範囲の終点 (上限または下限) が数値リテラルである場合、省略記号 (...) の前後に半角スペースを記述し、ピリオドのいずれかが小数点として扱われることを防止してください。

次に例を示します。


 case 0...4;   // error
 case 5 ... 9; // ok