【C言語】 switch文でdefaultのスペルミスはエラーにならない

switch文でdefaultのスペルミスはエラーにならない

warning: label ‘defalt’ defined but not used

警告:ラベル ‘defalt’ は定義されているが使用されていない
[-Wunused-label]

■default:の誤字はエラーにならない

#include    <stdio.h>
int     f1(int id)
{
    switch(id) {
    case    1:  return  1;
    case    2:  return  2;
    case    3:  return  3;
    //ダメ default: の誤字はコンパイルエラーにならない
    defalt:     return  4;
    }
}
int main(void)
{
    printf("%d\n",f1(4));
}

defaultの誤字はただの未使用ラベルです。
コンパイラは誤字を指摘しません。
コンパイルエラーにならないので間違いに気が付きません。
この例では return 4 を通過しないのでゴミが返却されます。


■未使用ラベルはエラーにならない

int     f2(int id)
{
    switch(id) {
    case    1:  return  1;
    case    2:  return  2;
    case    3:  return  3;
    //defaultの誤字は未使用ラベルになる
    unuseLabel: return  4;
    }
    return  0;
}

■case1もエラーにならない

#include <stdio.h>
const char 	*f(int month){
	switch (month) {
	case1:	return	"1月";
	case2:	return 	"2月";
	case3:	return 	"3月";
	case4:	return 	"4月";
	case5:	return 	"5月";
	case6:	return 	"6月";
	case7:	return 	"7月";
	case8:	return 	"8月";
	case9:	return 	"9月";
	case10:	return 	"10月";
	case11:	return 	"11月";
	case12:	return 	"12月";
	default:return 	"想定外入力";
	}
}
int main(void){
	for(int i = 1;i<=12;i++){
		printf("%s\n",f(i));
	}
}

コンパイル出来ますが意図した動きをしません。


case 1:
case1:とクッツケると
未使用ラベルになりますが
コンパイルエラーになりません。


■C言語でよくある誤字 roop

[roop” C言語]で検索
⇒loopが正解です。
出荷製品にこの誤字がある場合、
適切なソースコードレビューを
入社以来一度も受けた事が無いプログラマが
コーディングした可能性があります。

[DEBAG” C言語]で検索
⇒DEBUGが正解。
DEBAGは「(いたずら、罰で)ズボンを脱がす」 の意味だそうだ

[”メモリ開放]で検索
⇒メモリ解放が正解です。
プログラムの仕様書、設計書、コード中のコメントでよく間違えています。