【C言語】
デッドコード(到達不能コード)
switch文内で初期値のある変数宣言

switch文内で初期値のある変数宣言

warning: statement will never be executed

警告:宣言時の代入文が実行されることはない
[-Wswitch-unreachable]

■case文が無くてもエラーにならない

#include    <stdio.h>
void f1(int x)
{
    //コンパイルエラーにならない
    switch(x){
    }
}

意味の無い記述ですがcase文が無くてもコンパイルエラーになりません。


■到達不能の実行文もエラーにならない

void f2(int x)
{
    switch(x){ 
        printf("実行されない");
    }
}

意味の無い記述ですが実行文を記述できます。
x の値とは無関係に実行はされません。


■変数宣言できるが実行はされない

void f3(int x)
{
    switch(x){
        int i = 0 ; //変数宣言は有効だが実行はされない 
        int j;      //変数宣言は有効
        j = 0 ;     //実行はされない     
        printf("実行されない%d:%d",i,j);
    }
}

変数も宣言できますが実行はされません(制御が来ません)。

 i = 0
 j = 0
 printf()

は実行されません。


■最初のcaseの上に色々書いてはダメ

void f4(int x)
{
    switch(x){
        int i = 0 ; //変数宣言は有効だが実行はされない
        int j;      //変数宣言は有効
        j = 0 ;     //実行はされない
        printf("デバッグ文も実行されない%d:%d",i,j);
    case    1:  printf("実行される");   return  ;  
    case    2:  printf("実行される");   return  ;
    case    3:  printf("実行される");   return  ;  
    }
}

同様に case 前の変数宣言は可能ですが実行はされません
このため変数の初期化やデバッグ文は実行はされないので
注意して下さい。

参考:

DCL41-C. switch 文のなかでは最初の case 句より前で変数宣言しない

https://www.jpcert.or.jp/sc-rules/c-dcl41-c.html