warning: statement will never be executed
警告:宣言時の代入文が実行されることはない
[-Wswitch-unreachable]
■1.case文が無くてもエラーにならない
#include <stdio.h>
void f1(int x)
{
//コンパイルエラーにならない
switch(x){
}
}
意味の無い記述ですがcase文が無くてもコンパイルエラーになりません。
■2.到達不能の実行文もエラーにならない
void f2(int x)
{
switch(x){
printf("実行されない");
}
}
意味の無い記述ですが実行文を記述できます。
x の値とは無関係に実行はされません。
■3.変数宣言できるが実行はされない
void f3(int x)
{
switch(x){
int i = 0 ; //変数宣言は有効だが実行はされない
int j; //変数宣言は有効
j = 0 ; //実行はされない
printf("実行されない%d:%d",i,j);
}
}
変数も宣言できますが実行はされません(制御が来ません)。
i = 0
j = 0
printf()
は実行されません。
■4.最初の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