Code Fix

初級

error: unknown type name の原因と直し方

型名の大文字小文字を間違えたときに出るエラーです。intをIntと書いてしまうなど、キーボードの打ち間違いで起きがちです。

エラーメッセージの読み方

main.c:4:5: error: unknown type name 'Int'; did you mean 'int'?
main.c
ファイル名
4
行番号
5
列番号 — この位置でgccが構文解析に失敗しました
unknown type name 'Int'; did you mean 'int'?
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      Int     x = 5;
           ^
 5      printf("%d\n", x);
 6      return 0;
 7  }
main.c:4:5: error: unknown type name 'Int'; did you mean 'int'?

Cの組み込み型はすべて小文字です。大文字始まりのIntという型名は存在しません。

直し方: Int を int にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      Double  price = 9.99;
           ^
 5      printf("%.2f\n", price);
 6      return 0;
 7  }
main.c:4:5: error: unknown type name 'Double'; did you mean 'double'?

他の言語の型名の綴りに引きずられて大文字で書いてしまう典型的なミスです。Cのdoubleは常に小文字です。

直し方: Double を double にします。

この問題を解いてみる →

パターン3

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      Char      grade = 'A';
            ^
 5      printf("%c\n", grade);
 6      return 0;
 7  }
main.c:4:5: error: unknown type name 'Char'; did you mean 'char'?

gccは似た名前の既知の型を候補として提示してくれます(did you mean 'char'?)が、あくまで提案であり自動修正はされません。

直し方: Char を char にします。

この問題を解いてみる →

パターン4

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      Boolean flag = 1;
           ^
 5      printf("%d\n", flag);
 6      return 0;
 7  }
main.c:4:5: error: unknown type name 'Boolean'

Booleanのような他言語風の型名はCには存在しません。真偽値もint(0/1)として扱うのが基本です。

直し方: Boolean を int にします。

この問題を解いてみる →

パターン5

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      Long    count = 10;
           ^
 5      printf("%ld\n", count);
 6      return 0;
 7  }
main.c:4:5: error: unknown type name 'Long'; did you mean 'long'?

longも組み込み型なので小文字です。大文字始まりのLongという型名は存在しません。

直し方: Long を long にします。

この問題を解いてみる →

よくある誤解

Javaなど型名が大文字始まりの言語に慣れていると、Cでも同じ感覚で書いてしまいがちです。Cの組み込み型(int・char・doubleなど)はすべて小文字で、大文字小文字を区別します。

実務での勘所

Cの文法は、識別子が「型名」なのか「変数名」なのかによって、それ以降の解釈のされ方が変わるという性質を持っています(いわゆる"typedef名問題")。たとえばfoo bar;という並びは、fooが型名として認識されていれば「barという変数をfoo型で宣言する」という意味になりますが、そうでなければ構文エラーになります。Intのように大文字で書いてしまうと、コンパイラは「型名としてもtypedefとしても見たことが無い識別子」として扱い、unknown type nameという専用のエラーで区別して報告します。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)