C言語の誤字等
~defaultの誤字はコンパイルエラーにならない~

warning: label ‘defalt’ defined but not used

警告:ラベル ‘defalt’ の誤字はただの未使用ラベルになる
[-Wunused-label]

■この記事の概要

この記事では、C言語のswitch文でdefaultのスペルミスがコンパイルエラーにならない問題を解説しています。
例えば、defaltのような誤字は単なる未使用ラベルとみなされ、意図した動作をしません。
正しいラベル定義の重要性や誤動作を防ぐための方法を具体例を交えて説明しています。


■第1位 [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 を通過しないのでゴミが返却されます。


■第2位 [loop]の誤字[roop]

[roop” C言語]で検索
⇒loopが正解です。

学生の課題プログラムならばご愛敬ですが
会社の出荷製品にこの誤字がある場合、
適切なソースコードレビューを
入社以来一度も受けた事が無いプログラマが
コーディングした可能性があり
とっても危険なコードです。


■第3位 [解放]の誤字[開放]

[”メモリ開放]で検索
⇒メモリ解放が正解です。
解放=free
開放=open

プログラムの仕様書、設計書、コード中のコメントでよく間違えています。

参考:

DCL02-C. 視覚的に区別できる識別子を使う