C言語 コンパイラ エラー C2137:空の文字定数使用時の注意点について解説
C言語において、空の文字定数 '' を使用するとエラー C2137 が発生します。
たとえば、char c = ''; と記述するとコンパイラがエラーを出し、空文字であるため意図した値が設定できません。
一方、char d = ' '; のように空白を含む文字定数は問題なく動作します。
エラー発生例
誤った文字定数記述例
下記のコードは、空の文字定数を使用してしまった例です。
コンパイラは空の文字定数に対してエラーを報告するため、実行前に問題が発生します。
#include <stdio.h>
int main() {
    // 間違った例:空の文字定数を利用しているため、エラーになります
    char c = '';
    return 0;
}正しい文字定数記述例
下記のコードは、正しく空白文字を指定した例です。
必要な値が正しく設定されるため、コンパイルも実行も正しく行えます。
#include <stdio.h>
int main() {
    // 正しい例:空白文字を使っているのでエラーは発生しません
    char d = ' ';
    printf("d = %c\n", d);  // 出力例:d =
    return 0;
}d =文字定数の仕様とエラー原因
C言語における文字定数のルール
C言語では、文字定数は一つの文字をシングルクォーテーション(‘)で囲んで指定する必要があります。
以下の点に注意してください。
- 空白の場合は実際にスペースを記述する必要がある
- シングルクォーテーション内に文字がない場合、空の文字定数として扱われ、エラーとなる
空の文字定数が引き起こす問題
空の文字定数は、文字として認識するための情報が不足しているため、コンパイラはエラーを返します。
コードを書く際には必ず有効な文字を指定する必要があります。
コンパイラエラーメッセージの意味
コンパイラからのエラーメッセージは、「C2137」のようなコードで表現されることがあります。
このエラーメッセージは、文字定数として認識されるべき値が空になっているという意味を含みます。
エラーメッセージを確認し、記述ミスを修正することで、問題なくコンパイルが進むようになります。
エラー解決のための対策
正しい文字定数の記述方法
正しい文字定数を記述するためには、必ずシングルクォーテーション内に一文字を記述する必要があります。
例えば、以下のリストのように表現します。
- 空の場合 → 実際に空白文字を指定します:' '
- アルファベットの場合 → 例:'A'
- 数字の場合 → 例:'1'
修正後のコード例
以下は、正しい文字定数が利用されているサンプルコードです。
コンパイルエラーが解消され、正常にプログラムが動作します。
#include <stdio.h>
int main() {
    // 空白文字を正しく指定
    char d = ' ';
    // 他の正しい文字定数の例
    char letter = 'A';
    char number = '1';
    printf("d = %c\n", d);
    printf("letter = %c\n", letter);
    printf("number = %c\n", number);
    return 0;
}d =
letter = A
number = 1コード例による検証
問題コードとエラー出力の比較
下記に、問題があるコードとそのエラー出力例を比較した表を示します。
| コードの内容 | エラー発生の有無 | 
|---|---|
| char c = ''; | エラー発生 | 
| char d = ' '; | エラーなし | 
エラーとなるコードでは、コンパイラから以下のようなエラーメッセージが表示されることがあります。
例: 「C2137: 空の文字定数は許可されていません」
修正コードによる動作確認
下記に示す修正済みのコードは、コンパイルおよび実行時にエラーが発生せず、意図した通りに動作することが確認できました。
#include <stdio.h>
int main() {
    // 正しく空白文字を指定
    char d = ' ';
    printf("d = %c\n", d);
    return 0;
}d =まとめ
今回の内容では、空の文字定数を使用することによって発生するコンパイラエラーについて説明しました。
正しい文字定数の記述方法を理解しておくことで、エラーの原因を迅速に特定でき、修正も行いやすくなります。
今後、コードを書く際には必ずシングルクォーテーション内に適切な文字が記述されているか確認してみてください。
