C言語のほぼすべてのエラー解説記事です.記事内の解説の検索には,ページ内検索などをご利用ください.誤植などがありましたら,コメントお願いします.
- invalid type argument of ‘->’ (have ‘xxx’)
- ‘else’ without a previous ‘if’
- ‘for’ loop initial declarations are only allowed in C99 mode
- return type of ‘main’ is not ‘int’
- ‘xxx’ undeclared here (not in a function)
- ‘xxx’ redeclared as different kind of symbol
- redefinition of ‘xxx’
- ‘xxx’ undeclared (first use in this function)
- conflicting types for ‘xxx’
- ‘xxx’ has no member named ‘yyy’
- array size missing in ‘xxx’
- conflicting type qualifiers for ‘xxx’
- incompatible type for argument NNN of ‘xxx’
- switch quantity not an integer
- ‘default’ label not within a switch statement
- case label not within a switch statement
- redefinition of typedef ‘xxx’
- void value not ignored as it ought to be
- invalid use of void expression
- used struct type value where scalar is required
- stray ‘\xxx’ in program
- old-style parameter declarations in prototyped function definition
- cannot convert to a pointer type
- number of arguments doesn’t match prototype
- redefinition of parameter ‘xxx’
- parameter ‘xxx’ is initialized
- declaration for parameter ‘xxx’ but no such parameter
- parameter NNN (‘xxx’) has incomplete type
- parameter name omitted
- variable-sized object may not be initialized
- too many arguments to function ‘xxx’
- too few arguments to function ‘xxx’
- function definition declared ‘typedef’
- incompatible types when assigning to type ‘xxx’ from type ‘yyy’
- incompatible types when initializing type ‘xxx’ using type ‘yyy’
- incompatible types when returning type ‘xxx’ but ‘yyy’ was expected
- wrong type argument to decrement
- lvalue required as decrement operand
- called object ‘xxx’ is not a function
- request for member ‘xxx’ in something not a structure or union
- missing terminating ” character
- missing terminating ‘ character
- duplicate case value
- duplicate member ‘xxx’
- initializer element is not constant
- format ‘%fff’ expects a matching ‘xxx’ argument
- unknown conversion type character ‘xxx’ in format
- expected declaration or statement at end of input
- expected declaration specifiers before ‘xxx’ (token)
- expected declaration specifiers or ‘…’ before ‘xxx’ (token)
- expected expression at end of input
- expected expression before ‘xxx’ (token)
- expected identifier at end of input
- expected identifier before ‘xxx’ (token)
- expected identifier before numeric constant
- expected statement before ‘xxx’ (token)
- invalid lvalue in assignment
- invalid lvalue in decrement
- invalid lvalue in increment
- invalid lvalue in unary ‘&’
- invalid preprocessing directive #xxx
- invalid suffix “xxx” on integer constant
- syntax error at end of input
- syntax error before ‘xxx’ (token)
- syntax error before numeric constant
- syntax error before string constant
- too many decimal points in number
- unterminated comment
invalid type argument of ‘->’ (have ‘xxx’)
“invalid type argument of ‘->'” は、構造体のポインタを使用している場合に、そのポインタを使用する方法が間違っていることを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
struct example { int value; }; int main(void) { struct example ex; ex.value = 5; // この行は問題ありません ex->value = 5; // この行でエラーが発生します return 0; }
エラーが発生している行では、exが構造体であることを示す記号’.’を、ポインタを示す記号’->’に誤って使用しています。構造体を指すポインタを使用する場合は、’->’を使用する必要があります。正しいコードは次のようになります。
struct example { int value; }; int main(void) { struct example ex; ex.value = 5; // この行は問題ありません struct example *ex_ptr = &ex; // ex_ptrがexを指すように設定 ex_ptr->value = 5; // この行は問題ありません return 0; }
また、構造体を指すポインタを宣言する場合は、構造体名の後に’*’を付けて、構造体を指すポインタ型を宣言する必要があります。
struct example { int value; }; int main(void) { struct example *ex_ptr; // ex_ptrがexample構造体を指すように宣言 ex_ptr->value = 5; // この行は問題ありません return 0; }
このように、構造体を指すポインタを使用する場合は、’->’を使用して、構造体のメンバにアクセスする必要があります。
‘else’ without a previous ‘if’
“else” without a previous “if” は、else文が前に来るべきif文が存在しないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { int x = 5; else if (x > 5) { // この行でエラーが発生します printf("x is greater than 5\n"); } return 0; }
エラーが発生している行では、else文が前に来るべきif文が存在していません。else文は、if文に対する補助的な条件分岐を行うために使用されます。正しいコードは次のようになります。
int main(void) { int x = 5; if (x > 5) { printf("x is greater than 5\n"); } else { // else文が前に来るべきif文が存在します printf("x is not greater than 5\n"); } return 0; }
また、else文を使用する場合は、必ずif文が存在することを確認する必要があります。else文を使用する前に、if文が存在しない場合は、そのelse文を削除するか、if文を追加する必要があります。
さらに、else文を使用する場合は、注意して、開き括弧'{‘がif文やelse文に対する条件分岐を示していることを確認する必要があります。もし、if文やelse文の条件分岐を示すために必要な開き括弧が抜けている場合は、そのようなエラーが発生することがあります。
‘for’ loop initial declarations are only allowed in C99 mode
“for” loop initial declarations are only allowed in C99 mode は、for文の初期化部分で、変数を宣言しようとしているが、そのような記述が許可されていないというエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { for (int i = 0; i < 10; i++) { // この行でエラーが発生します printf("%d\n", i); } return 0; }
エラーが発生している行では、for文の初期化部分で、int型の変数iを宣言しようとしています。しかし、そのような記述は、C99モードでのみ許可されており、それ以外のモードではエラーとなります。
C99モードでは、for文の初期化部分で変数を宣言することができます。C89モードでは、for文の初期化部分で変数を宣言することはできません。C89モードでは、for文の初期化部分では、既に宣言されている変数を使用する必要があります。
正しいコードは次のようになります。
int main(void) { int i; // iを既に宣言 for (i = 0; i < 10; i++) { // for文の初期化部分でiを使用 printf("%d\n", i); } return 0; }
また、C99モードでは、for文の初期化部分で変数を宣言することができますが、そのような記述を使用する場合は、コンパイラにC99モードでのコンパイルを指示する必要があります。そのような指示方法は、コンパイラによって異なりますので、その使用方法を参照してください。
return type of ‘main’ is not ‘int’
“return type of ‘main’ is not ‘int'” は、main関数の返り値の型がintでないというエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
void main(void) { // この行でエラーが発生します printf("Hello, world!\n"); return; }
エラーが発生している行では、main関数の返り値の型をvoidにしています。しかし、main関数の返り値の型は、必ずintである必要があります。
main関数の返り値を使用することで、プログラムの終了ステータスを指定することができます。正常終了の場合は、0を返し、異常終了の場合は、0以外の値を返すことができます。
正しいコードは次のようになります。
int main(void) { printf("Hello, world!\n"); return 0; // main関数を正常終了させる }
また、main関数を宣言する場合は、必ずint型であることを確認する必要があります。もし、int型でない型を使用している場合は、そのようなエラーが発生することがあります。
‘xxx’ undeclared here (not in a function)
“‘xxx’ undeclared here (not in a function)” は、変数や関数が宣言されていないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { x = 5; // この行でエラーが発生します printf("%d\n", x); return 0; }
エラーが発生している行では、xという変数が宣言されていません。変数を使用する前に、その変数を宣言する必要があります。
正しいコードは次のようになります。
int main(void) { int x; // xを宣言 x = 5; // xに値を代入 printf("%d\n", x); return 0; }
また、このエラーは、関数が宣言されていない場合にも発生することがあります。関数を使用する前に、その関数を宣言する必要があります。
int main(void) { printf("%d\n", add(3, 4)); // add関数が宣言されていません return 0; } int add(int a, int b) { // add関数を宣言 return a + b; }
このように、変数や関数を使用する前に、それらが宣言されていることを確認する必要があります。
‘xxx’ redeclared as different kind of symbol
“‘xxx’ redeclared as different kind of symbol” は、同じ名前の変数や関数が異なる型で再定義されていることを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { int x; // xをint型で宣言 x = 5; printf("%d\n", x); char x; // xをchar型で再定義 x = 'A'; // この行でエラーが発生します printf("%c\n", x); return 0; }
エラーが発生している行では、すでにint型で宣言されているxをchar型で再定義しようとしています。同じ名前の変数や関数は、再定義することはできません。
正しいコードは次のようになります。
int main(void) { int x; // xをint型で宣言 x = 5; printf("%d\n", x); char y; // yをchar型で宣言 y = 'A'; printf("%c\n", y); return 0; }
このように、同じ名前の変数や関数は、再定義することはできません。
redefinition of ‘xxx’
“redefinition of ‘xxx'” は、すでに定義されている変数や関数が再定義されようとしていることを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int x; // xをint型で宣言 int main(void) { int x; // xを再定義 x = 5; // この行でエラーが発生します printf("%d\n", x); return 0; }
エラーが発生している行では、すでにint型で宣言されているxを再定義しようとしています。同じ名前の変数や関数は、再定義することはできません。
‘xxx’ undeclared (first use in this function)
“‘xxx’ undeclared (first use in this function)” は、変数や関数が宣言されていないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { x = 5; // この行でエラーが発生します printf("%d\n", x); return 0; }
エラーが発生している行では、xという変数が宣言されていません。変数を使用する前に、その変数を宣言する必要があります。
正しいコードは次のようになります。
int main(void) { int x; // xを宣言 x = 5; printf("%d\n", x); return 0; }
また、このエラーは、関数が宣言されていない場合にも発生することがあります。関数を使用する前に、その関数を宣言する必要があります。
int main(void) { printf("%d\n", add(3, 4)); // add関数が宣言されていません return 0; } int add(int a, int b) { // add関数を宣言 return a + b; }
このように、変数や関数を使用する前に、それらが宣言されていることを確認する必要があります。
conflicting types for ‘xxx’
“conflicting types for ‘xxx'” は、変数や関数が異なる型で宣言されていることを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int x; // xをint型で宣言 int main(void) { char x; // xをchar型で再定義 x = 'A'; // この行でエラーが発生します printf("%c\n", x); return 0; }
エラーが発生している行では、すでにint型で宣言されているxをchar型で再定義しようとしています。同じ名前の変数や関数は、異なる型で宣言することはできません。
正しいコードは次のようになります。
int main(void) { int x; // xをint型で宣言 x = 5; printf("%d\n", x); char y; // yをchar型で宣言 y = 'A'; printf("%c\n", y); return 0; }
このように、同じ名前の変数や関数は、異なる型で宣言することはできません。異なる型の変数や関数は、異なる名前を使用するようにします。
‘xxx’ has no member named ‘yyy’
“‘xxx’ has no member named ‘yyy'” は、構造体や共用体のメンバー変数が存在しないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
struct point { int x; int y; }; int main(void) { struct point p; p.z = 0; // この行でエラーが発生します printf("(%d, %d, %d)\n", p.x, p.y, p.z); return 0; }
エラーが発生している行では、point構造体にはzというメンバー変数が存在しません。point構造体には、xとyの2つのメンバー変数しか存在していません。
正しいコードは次のようになります。
struct point { int x; int y; }; int main(void) { struct point p; p.x = 0; p.y = 0; printf("(%d, %d)\n", p.x, p.y); return 0; }
このように、構造体や共用体のメンバー変数は、事前に定義されているものを使用する必要があります。また、構造体や共用体には、存在しないメンバー変数を使用しようとすると、このようなエラーが発生することがあります。
array size missing in ‘xxx’
“array size missing in ‘xxx'” は、配列のサイズが指定されていないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { int a[]; // この行でエラーが発生します a[0] = 0; printf("%d\n", a[0]); return 0; }
エラーが発生している行では、aという配列のサイズが指定されていません。配列を宣言する場合は、必ずサイズを指定する必要があります。
正しいコードは次のようになります。
int main(void) { int a[10]; // aをint型の配列として宣言 a[0] = 0; printf("%d\n", a[0]); return 0; }
このように、配列を宣言する場合は、必ずサイズを指定するようにします。また、配列のサイズを指定しないと、このようなエラーが発生することがあります。
conflicting type qualifiers for ‘xxx’
“conflicting type qualifiers for ‘xxx'” は、変数や関数が異なる型修飾子で宣言されていることを示すエラーメッセージです。
型修飾子とは、変数や関数の型を修飾するためのキーワードのことを指します。C言語では、const、volatile、restrict、_Atomicなどがあります。
このエラーは、次のようなコードで発生することがあります。
int main(void) { const int x; // xをconst int型で宣言 volatile x; // xをvolatile int型で再定義 x = 5; // この行でエラーが発生します printf("%d\n", x); return 0; }
エラーが発生している行では、すでにconst int型で宣言されているxをvolatile int型で再定義しようとしています。同じ名前の変数や関数は、異なる型修飾子で宣言することはできません。
正しいコードは次のようになります。
int main(void) { const int x; // xをconst int型で宣言 x = 5; printf("%d\n", x); volatile int y; // yをvolatile int型で宣言 y = 5; printf("%d\n", y); return 0; }
このように、同じ名前の変数や関数は、異なる型修飾子で宣言することはできません。異なる型修飾子の変数や関数は、異なる名前を使用するようにします。
incompatible type for argument NNN of ‘xxx’
“incompatible type for argument NNN of ‘xxx'” は、関数の引数の型が互換性がないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
void print(int x) { printf("%d\n", x); } int main(void) { print("hello"); // この行でエラーが発生します return 0; }
エラーが発生している行では、print関数に渡している引数がchar型であるにもかかわらず、print関数はint型の引数を受け取るように定義されています。
関数を呼び出す場合は、その関数が受け取る引数の型と互換性があるものを渡す必要があります。
正しいコードは次のようになります。
void print(int x) { printf("%d\n", x); } int main(void) { print(5); // print関数にint型の引数を渡す return 0; }
switch quantity not an integer
“switch quantity not an integer” は、switch文で使用される変数が整数でないことを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { char c = 'A'; switch (c) { // この行でエラーが発生します case 'A': printf("A\n"); break; case 'B': printf("B\n"); break; default: printf("other\n"); break; } return 0; }
エラーが発生している行では、switch文で使用されているcはchar型ですが、switch文では整数値しか使用できません。
正しいコードは次のようになります。
int main(void) { int i = 1; switch (i) { case 1: printf("A\n"); break; case 2: printf("B\n"); break; default: printf("other\n"); break; } return 0; }
このように、switch文で使用する変数は、必ず整数型である必要があります。
‘default’ label not within a switch statement
“‘default’ label not within a switch statement” は、default文がswitch文の中にある必要があることを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { int i = 1; default: // この行でエラーが発生します printf("A\n"); break; return 0; }
エラーが発生している行では、default文がswitch文の中にありません。default文は、switch文の内部にある必要があります。
正しいコードは次のようになります。
int main(void) { int i = 1; switch (i) { case 1: printf("A\n"); break; default: printf("other\n"); break; } return 0; }
このように、default文は、switch文の内部にある必要があります。
case label not within a switch statement
“case label not within a switch statement” は、case文がswitch文の中にある必要があることを示すエラーメッセージです。
このエラーは、次のようなコードで発生することがあります。
int main(void) { int i = 1; case 1: // この行でエラーが発生します printf("A\n"); break; return 0; }
エラーが発生している行では、case文がswitch文の中にありません。case文は、switch文の内部にある必要があります。
正しいコードは次のようになります。
int main(void) { int i = 1; switch (i) { case 1: printf("A\n"); break; case 2: printf("B\n"); break; default: printf("other\n"); break; } return 0; }
このように、case文は、switch文の内部にある必要があります。
redefinition of typedef ‘xxx’
“redefinition of typedef ‘xxx'” は、typedefで同じ名前の型が再度定義されていることを示すエラーメッセージです。
typedefは、既存の型に別名を付けることができるキーワードです。typedefで定義された名前を使用することで、型を簡潔に記述することができます。
このエラーは、次のようなコードで発生することがあります。
typedef int Age; // Ageをint型の別名として定義 typedef Age Age; // AgeをAge型の別名として再定義 int main(void) { Age age; // この行でエラーが発生します age = 20; printf("%d\n", age); return 0; }
エラーが発生している行では、すでにtypedefでAge型が定義されているにもかかわらず、Age型が再度定義されています。
正しいコードは次のようになります。
typedef int Age; // Ageをint型の別名として定義 int main(void) { Age age; // Age型の変数ageを宣言 age = 20; printf("%d\n", age); return 0; }
このように、typedefで同じ名前の型を再度定義することはできません。
void value not ignored as it ought to be
“void value not ignored as it ought to be” は、void型の変数や関数が代入や式の中で使用されていることを示すエラーメッセージです。
void型は、値を持たない型を表します。void型の変数は、値を持たず、何も表すものではありません。void型の関数は、戻り値を返さず、何も行わないものです。
このエラーは、次のようなコードで発生することがあります。
void print(void) { printf("Hello\n"); } int main(void) { int i; i = print(); // この行でエラーが発生します return 0; }
エラーが発生している行では、print関数はvoid型であるにもかかわらず、iに代入されています。void型の変数や関数は、代入や式の中で使用することはできません。
正しいコードは次のようになります。
void print(void) { printf("Hello\n"); } int main(void) { print(); // print関数を呼び出す return 0; }
invalid use of void expression
“invalid use of void expression” は、void型の値が式の中で使用されていることを示すエラーメッセージです。
void型は、値を持たない型を表します。void型の変数は、値を持たず、何も表すものではありません。void型の関数は、戻り値を返さず、何も行わないものです。
このエラーは、次のようなコードで発生することがあります。
void print(void) { printf("Hello\n"); } int main(void) { int i = 5 + print(); // この行でエラーが発生します return 0; }
エラーが発生している行では、print関数はvoid型であるにもかかわらず、式の中で使用されています。void型の値は、式の中で使用することはできません。
正しいコードは次のようになります。
void print(void) { printf("Hello\n"); } int main(void) { print(); // print関数を呼び出す int i = 5; i = i + 1; // iをインクリメントする return 0; }
このように、void型の値は、式の中で使用することはできません。
used struct type value where scalar is required
“used struct type value where scalar is required” は、構造体型の変数がスカラ値が必要な場所で使用されていることを示すエラーメッセージです。
構造体型は、複数の変数をまとめた型です。構造体型の変数は、複数の変数をまとめたものであるため、スカラ値として扱うことはできません。
このエラーは、次のようなコードで発生することがあります。
struct point { int x; int y; }; int main(void) { struct point p = {0, 0}; int i = p; // この行でエラーが発生します return 0; }
エラーが発生している行では、構造体型の変数pがint型の変数iに代入されています。構造体型の変数は、スカラ値として扱うことはできません。
正しいコードは次のようになります。
struct point { int x; int y; }; int main(void) { struct point p = {0, 0}; int i = p.x; // p.xをint型の変数iに代入する return 0; }
このように、構造体型の変数は、スカラ値として扱うことはできません。
stray ‘\xxx’ in program
stray ‘\xxx’ in programとは、プログラム中に無効なエスケープシーケンスが含まれていることを示すエラーメッセージです。
エスケープシーケンスとは、特殊な意味を持つ文字を表すために使われる特殊な文字列です。例えば、改行を表すには’\n’というエスケープシーケンスを使用します。
stray ‘\xxx’ in programエラーが発生する原因としては、次のようなものが考えられます。
- 必要なクォーテーションが不足している
- クォーテーションが閉じられていない
- 無効なエスケープシーケンスが使われている
例えば、次のようなプログラムを考えます。
#include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; }
このプログラムでは、’\n’というエスケープシーケンスを使用しています。このエスケープシーケンスは、改行を表すものであり、有効なエスケープシーケンスです。
しかし、次のようなプログラムでは、無効なエスケープシーケンスが使われています。
#include <stdio.h> int main(void) { printf("Hello, world!\x); return 0; }
このプログラムでは、’\x’というエスケープシーケンスが使われていますが、このエスケープシーケンスは有効なエスケープシーケンスではありません。そのため、コンパイラはstray ‘\x’ in programというエラーメッセージを出力します。
その他にも、クォーテーションが閉じられていない、必要なクォーテーションが不足しているといった場合にも、stray ‘\xxx’ in programエラーが発生することがあります。
old-style parameter declarations in prototyped function definition
Old-style parameter declarations in prototyped function definitionというエラーは、C言語で関数を定義する際に、古い方法であるold-style parameter declarationsを使用していることを示すエラーです。このエラーが発生すると、コンパイラは、関数定義に使用されているパラメータリストが古い形式であることを指摘します。
このエラーが発生する原因としては、以下のようなものが考えられます。
- 関数を定義する際に、old-style parameter declarationsを使用している
- 関数を定義する前に、プロトタイプ宣言を行っていない
以下は、old-style parameter declarationsを使用して関数を定義した場合に、エラーが発生する例です。
int max(x, y) // old-style parameter declarationsを使用している int x, int y; // パラメータの型を明示していない { if (x > y) { return x; } else { return y; } }
この例では、関数maxを定義する際に、old-style parameter declarationsを使用しているため、エラーが発生します。
このような場合には、関数を定義する際に、プロトタイプ宣言を使用するように修正することで、エラーを解消することができます。以下は、上記の例を修正した例です。
int max(int x, int y); // プロトタイプ宣言 int max(int x, int y) { // 関数を定義 if (x > y) { return x; } else { return y; } }
上記の例では、関数maxを定義する前に、プロトタイプ宣言を行っているため、エラーが解消されます。
cannot convert to a pointer type
このエラーは、C言語でポインタ型に変換できない値をポインタ型に代入しようとしたときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
int x = 10; int *p; p = x; // エラー: cannot convert to a pointer type
このエラーが発生した原因は、整数型の変数xをint型のポインタ型の変数pに代入しようとしているためです。C言語では、整数型の値をポインタ型に変換することはできません。
このエラーを修正するには、int型の変数xをint型のポインタ型の変数pが指す先に代入するようにすればよいです。例えば、以下のように書くことができます。
int x = 10; int *p; p = &x; // 正しい
このように、&を使用してxのアドレスを取得し、そのアドレスをpに代入することで、エラーを修正することができます。
number of arguments doesn’t match prototype
このエラーは、C言語で関数を呼び出すときに、関数の引数の数と定義された原型(プロトタイプ)で定義されている引数の数が異なるときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int a, int b) { // 関数の処理 } int main() { func(10); // エラー: number of arguments doesn't match prototype }
このエラーが発生した原因は、関数funcを呼び出しているときに、1つの引数しか渡していないためです。しかし、func関数は、2つの引数を受け取るように定義されています。そのため、引数の数が原型で定義されている引数の数と異なるため、このエラーが発生します。
このエラーを修正するには、関数を呼び出すときに、原型で定義されている引数の数と同じ数の引数を渡すようにすればよいです。例えば、以下のように書くことができます。
void func(int a, int b) { // 関数の処理 } int main() { func(10, 20); // 正しい }
このように、func関数を呼び出すときに、2つの引数を渡すようにすることで、エラーを修正することができます。
redefinition of parameter ‘xxx’
このエラーは、C言語で同じ名前のパラメータが複数回定義されているときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int x) { int x; // エラー: redefinition of parameter 'x' // 関数の処理 }
このエラーが発生した原因は、関数funcの引数として定義されているパラメータxと、関数内で新しく定義されている変数xが同じ名前であるためです。C言語では、同じ名前のパラメータを複数回定義することはできません。
このエラーを修正するには、関数内で新しく定義する変数を別の名前にするか、パラメータxを別の名前にするようにすればよいです。例えば、以下のように書くことができます。
void func(int x) { int y; // 正しい // 関数の処理 }
また、以下のように書くこともできます。
void func(int parameter) { int x; // 正しい // 関数の処理 }
このように、関数内で新しく定義する変数を別の名前にするか、パラメータを別の名前にすることで、エラーを修正することができます。
parameter ‘xxx’ is initialized
このエラーは、C言語でパラメータが初期化されているときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int x = 0) { // エラー: parameter 'x' is initialized // 関数の処理 }
このエラーが発生した原因は、関数のパラメータxが初期化されているためです。C言語では、関数のパラメータは初期化することができません。
このエラーを修正するには、パラメータxを初期化する記述を削除するようにすればよいです。例えば、以下のように書くことができます。
void func(int x) { // 正しい // 関数の処理 }
このように、パラメータxを初期化する記述を削除することで、エラーを修正することができます。
declaration for parameter ‘xxx’ but no such parameter
このエラーは、C言語で関数の引数として定義されているパラメータが、関数の原型(プロトタイプ)で定義されていないときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int x, int y); // 関数の原型(プロトタイプ) void func(int x, int y, int z) { // エラー: declaration for parameter 'z' but no such parameter // 関数の処理 }
このエラーが発生した原因は、関数の原型(プロトタイプ)では、xとyの2つの引数しか定義されていないにも関わらず、関数本体ではx、y、zの3つの引数が定義されているためです。このように、関数の原型(プロトタイプ)で定義されている引数の数と、関数本体で定義されている引数の数が異なると、このエラーが発生します。
このエラーを修正するには、関数の原型(プロトタイプ)を修正して、引数の数を正しく定義するようにすればよいです。例えば、以下のように書くことができます。
void func(int x, int y, int z); // 関数の原型(プロトタイプ)を修正 void func(int x, int y, int z) { // 正しい // 関数の処理 }
このように、関数の原型(プロトタイプ)を修正することで、エラーを修正することができます。
parameter NNN (‘xxx’) has incomplete type
このエラーは、C言語でパラメータの型が不完全な型であるときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
struct S; // S型の構造体を宣言 void func(struct S s) { // エラー: parameter 1 ('s') has incomplete type // 関数の処理 }
このエラーが発生した原因は、S型の構造体を宣言しているにも関わらず、S型の構造体の詳細な定義がされていないためです。C言語では、構造体型を宣言する場合には、構造体の各メンバーの型や名前が記述されている必要があります。
このエラーを修正するには、S型の構造体の詳細な定義を行うようにすればよいです。例えば、以下のように書くことができます。
struct S { int x; int y; }; // S型の構造体を定義 void func(struct S s) { // 正しい // 関数の処理 }
このように、S型の構造体の詳細な定義を行うことで、エラーを修正することができます。
parameter name omitted
このエラーは、C言語で関数のパラメータ名が省略されているときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int) { // エラー: parameter name omitted // 関数の処理 }
このエラーが発生した原因は、関数funcの引数に対して、パラメータ名が省略されているためです。C言語では、関数のパラメータには必ず名前を付ける必要があります。
このエラーを修正するには、関数のパラメータに名前を付けるようにすればよいです。例えば、以下のように書くことができます。
void func(int x) { // 正しい // 関数の処理 }
このように、関数のパラメータに名前を付けることで、エラーを修正することができます。
variable-sized object may not be initialized
このエラーは、C言語で変数サイズのオブジェクト(配列や構造体など)が初期化されているときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
int n; scanf("%d", &n); int a[n] = {0}; // エラー: variable-sized object may not be initialized
このエラーが発生した原因は、配列aのサイズが変数nで決まる変数サイズのオブジェクトであるためです。C言語では、変数サイズのオブジェクトは初期化することができません。
このエラーを修正するには、変数サイズのオブジェクトを初期化する記述を削除するようにすればよいです。例えば、以下のように書くことができます。
int n; scanf("%d", &n); int a[n]; // 正しい
too many arguments to function ‘xxx’
このエラーは、C言語で関数に渡される引数の数が関数が期待する引数の数よりも多いときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int x, int y) { // 関数の処理 } int main() { func(1, 2, 3); // エラー: too many arguments to function 'func' return 0; }
このエラーが発生した原因は、関数funcが期待する引数は2つであるにも関わらず、3つの引数が渡されているためです。C言語では、関数に渡される引数の数は関数が期待する引数の数と一致している必要があります。
このエラーを修正するには、関数に渡される引数の数を関数が期待する引数の数と一致させるようにすればよいです。例えば、以下のように書くことができます。
void func(int x, int y) { // 関数の処理 } int main() { func(1, 2); // 正しい return 0; }
このように、関数に渡される引数の数を関数が期待する引数の数と一致させることで、エラーを修正することができます。
too few arguments to function ‘xxx’
このエラーは、C言語で関数に渡される引数の数が関数が期待する引数の数よりも少ないときに発生するエラーです。例えば、以下のようなコードでこのエラーが発生します。
void func(int x, int y) { // 関数の処理 } int main() { func(1); // エラー: too few arguments to function 'func' return 0; }
このエラーが発生した原因は、関数funcが期待する引数は2つであるにも関わらず、1つの引数しか渡されていないためです。C言語では、関数に渡される引数の数は関数が期待する引数の数と一致している必要があります。
このエラーを修正するには、関数に渡される引数の数を関数が期待する引数の数と一致させるようにすればよいです。例えば、以下のように書くことができます。
void func(int x, int y) { // 関数の処理 } int main() { func(1, 2); // 正しい return 0; }
function definition declared ‘typedef’
“function definition declared ‘typedef'”というエラーは、C言語で関数を定義する際に、関数の型を宣言するためにtypedefを使用している場合に発生するエラーです。
このエラーが発生する原因は、typedefを使用して型を定義することはできますが、関数を定義することはできません。関数を定義するには、通常の関数宣言を使用する必要があります。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
typedef int (*FuncType)(int, int); FuncType add(int x, int y) { return x + y; }
このエラーを解決するには、関数宣言を使用して、関数を定義する必要があります。例えば、次のように書くことができます。
typedef int (*FuncType)(int, int); int add(int x, int y); int add(int x, int y) { return x + y; }
また、関数の返り値の型を定義する場合にも、同様に関数宣言を使用する必要があります。例えば、次のように書くことができます。
typedef int (*FuncType)(int, int); FuncType add; int add(int x, int y) { return x + y; }
これで、”function definition declared ‘typedef'”というエラーを解決することができます。
incompatible types when assigning to type ‘xxx’ from type ‘yyy’
“incompatible types when assigning to type ‘xxx’ from type ‘yyy'”というエラーは、C言語で変数に値を代入する際に、代入する値の型が変数の型と互換性がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、変数に値を代入する際に、値の型と変数の型が一致している必要があるためです。値の型と変数の型が一致していない場合、コンパイラは互換性がないと判断し、エラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x; char y = 'a'; x = y; // error: incompatible types when assigning to type 'int' from type 'char'
このエラーを解決するには、値の型を変数の型に合わせるように修正する必要があります。例えば、次のように書くことができます。
int x; char y = 'a'; x = (int)y; // okay
また、同様に、構造体やポインタなど、複雑な型を扱う場合にも、このエラーが発生する可能性があります。その場合は、値の型と変数の型を合わせるように修正する必要があります。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
struct Point { int x; int y; }; struct Point *p; int main(void) { p = malloc(sizeof(struct Point)); // okay p = malloc(sizeof(int)); // error: incompatible types when assigning to type 'struct Point *' from type 'void *' return 0; }
incompatible types when initializing type ‘xxx’ using type ‘yyy’
“incompatible types when initializing type ‘xxx’ using type ‘yyy'”というエラーは、C言語で変数を初期化する際に、変数の型と初期値の型が互換性がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、変数を初期化する際に、変数の型と初期値の型が一致している必要があるためです。型が一致していない場合、コンパイラは互換性がないと判断し、エラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x = 'a'; // error: incompatible types when initializing type 'int' using type 'char'
このエラーを解決するには、変数の型と初期値の型を合わせるように修正する必要があります。例えば、次のように書くことができます。
int x = 97; // okay char y = 'a'; // okay
また、同様に、構造体やポインタなど、複雑な型を扱う場合にも、このエラーが発生する可能性があります。その場合は、変数の型と初期値の型を合わせるように修正する必要があります。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
struct Point { int x; int y; }; struct Point p = malloc(sizeof(struct Point)); // error: incompatible types when initializing type 'struct Point' using type 'void *'
このエラーを解決するには、変数の型と初期値の型を合わせるように修正する必要があります。
incompatible types when returning type ‘xxx’ but ‘yyy’ was expected
“incompatible types when returning type ‘xxx’ but ‘yyy’ was expected”というエラーは、C言語で関数から値を返す際に、返す値の型が関数の返り値の型と互換性がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、関数から値を返す際に、返す値の型が関数の返り値の型と一致している必要があるためです。型が一致していない場合、コンパイラは互換性がないと判断し、エラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int add(int x, int y) { return x + y; // okay } char add(int x, int y) { return x + y; // error: incompatible types when returning type 'int' but 'char' was expected }
このエラーを解決するには、返す値の型を関数の返り値の型に合わせるように修正する必要があります。例えば、次のように書くことができます。
int add(int x, int y) { return x + y; // okay } int add(int x, int y) { return x + y; // okay }
また、同様に、構造体やポインタなど、複雑な型を扱う場合にも、このエラーが発生する可能性があります。その場合は、返す値の型を関数の返り値の型に合わせるように修正する必要があります。
wrong type argument to decrement
“wrong type argument to decrement”というエラーは、C言語で–演算子を使用して変数をデクリメントする際に、変数の型が適切でない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、–演算子を使用して変数をデクリメントすることができるのは、int型や構造体など、特定の型の変数だけであるためです。その他の型の変数をデクリメントすることはできず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
char c = 'a'; c--; // error: wrong type argument to decrement
このエラーを解決するには、–演算子を使用してデクリメントする変数をint型や構造体など、適切な型に変更する必要があります。例えば、次のように書くことができます。
int x = 1; x--; // okay
また、同様に、ポインタをデクリメントする場合も、ポインタの型が適切である必要があります。例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int a[10]; int *p = &a[0]; p--; // okay char *q = (char*)&a[0]; q--; // error: wrong type argument to decrement
このエラーを解決するには、ポインタを適切な型に変更する必要があります。例えば、次のように書くことができます。
int a[10]; char *q = (char*)&a[0]; q--; // okay
lvalue required as decrement operand
“lvalue required as decrement operand”というエラーは、C言語で–演算子を使用して変数をデクリメントする際に、デクリメントする変数が左辺値でない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、–演算子を使用して変数をデクリメントするには、変数が左辺値である必要があるためです。左辺値とは、変数や配列の要素など、値を変更できる式のことを指します。一方、定数や関数の返り値など、値を変更できない式は左辺値ではありません。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x = 1; (x + 1)--; // error: lvalue required as decrement operand
このエラーを解決するには、–演算子を使用してデクリメントする変数を左辺値に変更する必要があります。例えば、次のように書くことができます。
int x = 1; x--; // okay
また、同様に、構造体やポインタなど、複雑な型を扱う場合にも、このエラーが発生する可能性があります。その場合は、–演算子を使用してデクリメントする変数を左辺値に変更する必要があります。
called object ‘xxx’ is not a function
“called object ‘xxx’ is not a function”というエラーは、C言語で関数を呼び出す際に、呼び出す対象が関数でない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、関数を呼び出すには、呼び出す対象が関数である必要があるためです。一方、変数や構造体、定数などは関数ではありません。そのため、これらを関数として呼び出すことはできず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x = 1; x(1, 2); // error: called object 'x' is not a function
このエラーを解決するには、呼び出す対象を関数に変更する必要があります。例えば、次のように書くことができます。
int add(int x, int y) { return x + y; } int main() { int x = add(1, 2); // okay }
また、同様に、関数を宣言していない場合や、関数名が間違っている場合にも、このエラーが発生する可能性があります。その場合は、関数を宣言したり、関数名を修正する必要があります。
request for member ‘xxx’ in something not a structure or union
“request for member ‘xxx’ in something not a structure or union”というエラーは、C言語で構造体や共用体のメンバにアクセスする際に、アクセスする対象が構造体や共用体でない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、構造体や共用体のメンバにアクセスするには、アクセスする対象が構造体や共用体である必要があるためです。一方、変数や定数などは構造体や共用体ではありません。そのため、これらのメンバにアクセスすることはできず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
struct Point { int x; int y; }; int main() { int x = 1; x.x = 10; // error: request for member 'x' in something not a structure or union }
このエラーを解決するには、構造体や共用体の変数を宣言し、その変数を使用してメンバにアクセスする必要があります。例えば、次のように書くことができます。
struct Point { int x; int y; }; int main() { struct Point p; p.x = 10; // okay }
missing terminating ” character
“missing terminating ‘”‘ character”というエラーは、C言語で文字列リテラルを定義する際に、文字列リテラルを閉じるためのクォーテーションマークが欠落している場合に発生するエラーです。
このエラーが発生する原因は、C言語では、文字列リテラルを定義するには、文字列リテラルを囲むクォーテーションマークが必要であるためです。文字列リテラルを囲むクォーテーションマークが欠落している場合には、文字列リテラルが正しく定義されず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
char *s = "hello world; // error: missing terminating '"' character
このエラーを解決するには、文字列リテラルを囲むクォーテーションマークを追加する必要があります。例えば、次のように書くことができます。
char *s = "hello world"; // okay
また、同様に、文字列リテラルを複数行に渡って定義する場合にも、このエラーが発生する可能性があります。その場合は、文字列リテラルを囲むクォーテーションマークを追加する必要があります。
missing terminating ‘ character
“missing terminating ‘ character”というエラーは、C言語で文字リテラルを定義する際に、文字リテラルを閉じるためのアポストロフィマークが欠落している場合に発生するエラーです。
このエラーが発生する原因は、C言語では、文字リテラルを定義するには、文字リテラルを囲むアポストロフィマークが必要であるためです。文字リテラルを囲むアポストロフィマークが欠落している場合には、文字リテラルが正しく定義されず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
char c = 'a; // error: missing terminating ' character
このエラーを解決するには、文字リテラルを囲むアポストロフィマークを追加する必要があります。例えば、次のように書くことができます。
char c = 'a'; // okay
また、同様に、文字リテラルを定義する際に、エスケープシーケンスを使用する場合にも、このエラーが発生する可能性があります。その場合は、文字リテラルを囲むアポストロフィマークを追加する必要があります。
duplicate case value
“duplicate case value”というエラーは、C言語でswitch文を使用した場合に、caseラベルで指定した値が重複している場合に発生するエラーです。
このエラーが発生する原因は、C言語では、switch文のcaseラベルで指定した値は、一意である必要があるためです。一意でない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x = 1; switch (x) { case 1: // ... break; case 2: // ... break; case 1: // error: duplicate case value // ... break; }
このエラーを解決するには、caseラベルで指定した値を一意にする必要があります。例えば、次のように書くことができます。
int x = 1; switch (x) { case 1: // ... break; case 2: // ... break; case 3: // ... break; }
また、同様に、caseラベルで指定した値がswitch文の式の型と一致していない場合にも、このエラーが発生する可能性があります。その場合は、caseラベルで指定した値を修正する必要があります。
duplicate member ‘xxx’
“duplicate member ‘xxx'”というエラーは、C言語で構造体や共用体を定義する際に、同じ名前のメンバが重複して定義されている場合に発生するエラーです。
このエラーが発生する原因は、C言語では、構造体や共用体のメンバは、同じ名前を持たない必要があるためです。同じ名前を持つ場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
struct Point { int x; int y; int x; // error: duplicate member 'x' };
このエラーを解決するには、構造体や共用体のメンバを定義する際に、同じ名前を持たないようにする必要があります。例えば、次のように書くことができます。
struct Point { int x; int y; int z; };
また、同様に、構造体や共用体のメンバを定義する際に、同じ型を持つメンバが複数ある場合にも、このエラーが発生する可能性があります。その場合は、同じ型を持つメンバを分けて定義するか、別の型を使用するように修正する必要があります。
initializer element is not constant
“initializer element is not constant”というエラーは、C言語で初期化子を使用して変数を初期化する際に、初期化子が定数ではない値を指定した場合に発生するエラーです。
このエラーが発生する原因は、C言語では、変数を宣言する際に、初期化子を使用して変数を初期化する場合、初期化子が定数である必要があるためです。定数でない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x; int y = x + 1; // error: initializer element is not constant
このエラーを解決するには、初期化子を使用して変数を初期化する場合、初期化子が定数である必要があることを意識し、初期化子を修正する必要があります。例えば、次のように書くことができます。
int x; int y = 1; // okay
また、同様に、初期化子を使用して変数を初期化する際に、初期化子が定数であるにも関わらず、変数の型と一致していない場合にも、このエラーが発生する可能性があります。その場合は、初期化子を修正する必要があります。
format ‘%fff’ expects a matching ‘xxx’ argument
“format ‘%fff’ expects a matching ‘xxx’ argument”というエラーは、C言語でprintf関数を使用した場合に、指定したフォーマット文字列に対応する引数が提供されていない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、printf関数を使用する際に、フォーマット文字列で指定した引数の数と、実際に提供される引数の数が一致している必要があるためです。一致していない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x = 1; printf("%d %f", x); // error: format '%fff' expects a matching 'double' argument
このエラーを解決するには、printf関数を使用する際に、フォーマット文字列で指定した引数の数と、実際に提供する引数の数を一致させる必要があります。例えば、次のように書くことができます。
int x = 1; double y = 2.0; printf("%d %f", x, y); // okay
また、同様に、printf関数を使用する際に、フォーマット文字列で指定した型と、実際に提供される引数の型が一致していない場合にも、このエラーが発生する可能性があります。
unknown conversion type character ‘xxx’ in format
“unknown conversion type character ‘xxx’ in format”というエラーは、C言語でprintf関数を使用した場合に、フォーマット文字列内に無効な変換指定子が使用されている場合に発生するエラーです。
このエラーが発生する原因は、C言語では、printf関数を使用する際に、フォーマット文字列内で使用できる変換指定子は、一定の範囲内である必要があるためです。その範囲外の変換指定子が使用される場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int x = 1; printf("%d %x", x); // error: unknown conversion type character 'x' in format
このエラーを解決するには、printf関数を使用する際に、フォーマット文字列内で使用できる変換指定子を正しく使用する必要があります。例えば、次のように書くことができます。
int x = 1; printf("%d %#x", x, x); // okay
また、同様に、printf関数を使用する際に、フォーマット文字列内で使用される変換指定子が、引数の型と一致していない場合にも、このエラーが発生する可能性があります。
expected declaration or statement at end of input
“expected declaration or statement at end of input”というエラーは、C言語でプログラムをコンパイルする際に、プログラムの末尾に有効な宣言や文がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、プログラムの末尾には、有効な宣言や文が必要であるためです。有効な宣言や文がない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { return 0; }
このエラーを解決するには、プログラムの末尾に、有効な宣言や文を追加する必要があります。例えば、次のように書くことができます。
int main() { return 0; } int foo() { return 1; }
また、同様に、プログラムの末尾に、必要な宣言や文が足りない場合にも、このエラーが発生する可能性があります。その場合は、プログラムを修正する必要があります。
expected declaration specifiers before ‘xxx’ (token)
“expected declaration specifiers before ‘xxx’ (token)”というエラーは、C言語でプログラムをコンパイルする際に、宣言の修飾子が足りない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、変数や関数を宣言する際に、宣言の修飾子が必要であるためです。宣言の修飾子が足りない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { foo = 1; // error: expected declaration specifiers before 'foo' (token) return 0; }
このエラーを解決するには、宣言の修飾子を正しく使用する必要があります。例えば、次のように書くことができます。
int main() { int foo = 1; return 0; }
また、同様に、宣言の修飾子が足りない場合にも、このエラーが発生する可能性があります。その場合は、宣言の修飾子を正しく使用する必要があります。
注意: このエラーは、変数や関数を宣言する際に発生するエラーです。変数や関数を使用する際には、このエラーは発生しません。
expected declaration specifiers or ‘…’ before ‘xxx’ (token)
“expected declaration specifiers or ‘…’ before ‘xxx’ (token)”というエラーは、C言語でプログラムをコンパイルする際に、宣言の修飾子が足りない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、変数や関数を宣言する際に、宣言の修飾子が必要であるためです。宣言の修飾子が足りない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { foo = 1; // error: expected declaration specifiers or '...' before 'foo' (token) return 0; }
このエラーを解決するには、宣言の修飾子を正しく使用する必要があります。例えば、次のように書くことができます。
int main() { int foo = 1; return 0; }
また、同様に、宣言の修飾子が足りない場合にも、このエラーが発生する可能性があります。その場合は、宣言の修飾子を正しく使用する必要があります。
注意: このエラーは、変数や関数を宣言する際に発生するエラーです。変数や関数を使用する際には、このエラーは発生しません。
expected expression at end of input
“expected expression at end of input”というエラーは、C言語でプログラムをコンパイルする際に、行末に有効な式がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、行末には、有効な式が必要であるためです。有効な式がない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { return; // error: expected expression at end of input }
このエラーを解決するには、行末に、有効な式を追加する必要があります。例えば、次のように書くことができます。
int main() { return 0; }
また、同様に、行末に、必要な式が足りない場合にも、このエラーが発生する可能性があります。その場合は、プログラムを修正する必要があります。
expected expression before ‘xxx’ (token)
“expected expression before ‘xxx’ (token)”というエラーは、C言語でプログラムをコンパイルする際に、有効な式が足りない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、文の中では、有効な式が必要であるためです。有効な式が足りない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { if (foo) { // error: expected expression before 'foo' (token) } return 0; }
このエラーを解決するには、有効な式を追加する必要があります。例えば、次のように書くことができます。
int main() { if (foo == 1) { } return 0; }
また、同様に、有効な式が足りない場合にも、このエラーが発生する可能性があります。その場合は、プログラムを修正する必要があります。
expected identifier at end of input
“expected identifier at end of input”というエラーは、C言語でプログラムをコンパイルする際に、行末に識別子がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、行末には、識別子が必要であるためです。識別子がない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { foo; // error: expected identifier at end of input return 0; }
このエラーを解決するには、行末に、識別子を追加する必要があります。例えば、次のように書くことができます。
int main() { int foo; return 0; }
また、同様に、行末に、必要な識別子が足りない場合にも、このエラーが発生する可能性があります。その場合は、プログラムを修正する必要があります。
expected identifier before ‘xxx’ (token)
“expected identifier before ‘xxx’ (token)”というエラーは、C言語でプログラムをコンパイルする際に、文の中で識別子が足りない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、文の中では、識別子が必要であるためです。識別子が足りない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { = 1; // error: expected identifier before '=' (token) return 0; }
このエラーを解決するには、文の中に、識別子を追加する必要があります。例えば、次のように書くことができます。
int main() { int foo = 1; return 0; }
また、同様に、文の中に、必要な識別子が足りない場合にも、このエラーが発生する可能性があります。その場合は、プログラムを修正する必要があります。
expected identifier before numeric constant
“expected identifier before numeric constant”というエラーは、C言語でプログラムをコンパイルする際に、数値リテラルの前に識別子がない場合に発生するエラーです。
このエラーが発生する原因は、C言語では、数値リテラルを使用する際には、その前に識別子が必要であるためです。識別子がない場合には、プログラムの意図を正しく反映できず、コンパイラはそのような場合にこのエラーを出力します。
例えば、次のようなコードを書いた場合に、このエラーが発生する可能性があります。
int main() { 1 + 1; // error: expected identifier before numeric constant return 0; }
このエラーを解決するには、数値リテラルの前に、識別子を追加する必要があります。例えば、次のように書くことができます。
int main() { int foo = 1 + 1; return 0; }
また、同様に、数値リテラルの前に、必要な識別子が足りない場合にも、このエラーが発生する可能性があります。その場合は、プログラムを修正する必要があります。
expected statement before ‘xxx’ (token)
このエラーは、C 言語のコンパイラが、その文法的に意味のある部分(トークン)の前に期待している文があると解釈した場合に表示されます。このエラーは、通常、次のような場合に発生します。
- 関数を定義しているときに、関数名の前に期待する文がない場合
void foo() // 関数定義 { // 関数の本体 } int main() { foo(); // 関数呼び出し return 0; }
- 変数を宣言しているときに、変数名の前に期待する文がない場合
int x; // 変数宣言 int main() { x = 10; // 変数を使用 return 0; }
- 式を評価しているときに、式の前に期待する文がない場合
int main() { 5 + 3; // 式を評価 return 0; }
このエラーを修正するには、対応する文を追加する必要があります。例えば、関数を定義する場合は、関数の型(例えば int
や void
)を、変数を宣言する場合は、変数の型(例えば int
や char
)を、式を評価する場合は、評価する値(例えば 5
や x
)を追加する必要があります。
invalid lvalue in assignment
このエラーは、C 言語のコンパイラが、代入文(=
)の左側に、有効な代入先(左辺値)があると解釈しなかった場合に表示されます。このエラーは、通常、次のような場合に発生します。
- 変数以外を代入先として使用しようとした場合
int main() { 5 = 10; // 5 は変数ではないので、代入先として使用できません return 0; }
- 配列の要素を単独で代入先として使用しようとした場合
int main() { int a[10]; a[5] = 10; // a[5] は単独では代入先として使用できません return 0; }
- 関数名を代入先として使用しようとした場合
int foo() // 関数定義 { return 0; } int main() { foo = 10; // foo は関数名であり、代入先として使用できません return 0; }
このエラーを修正するには、代入文の左側に、有効な代入先(変数名や配列の要素を含む可変長式)を指定する必要があります。
invalid lvalue in decrement
このエラーは、C 言語のコンパイラが、デクリメント演算子(--
)の左側に、有効な代入先(左辺値)があると解釈しなかった場合に表示されます。このエラーは、通常、次のような場合に発生します。
- 変数以外をデクリメントする場合
int main() { 5--; // 5 は変数ではないので、デクリメントできません return 0; }
- 配列の要素を単独でデクリメントする場合
int main() { int a[10]; a[5]--; // a[5] は単独ではデクリメントできません return 0; }
- 関数名をデクリメントする場合
int foo() // 関数定義 { return 0; } int main() { foo--; // foo は関数名であり、デクリメントできません return 0; }
このエラーを修正するには、デクリメント演算子の左側に、有効な代入先(変数名や配列の要素を含む可変長式)を指定する必要があります。
invalid lvalue in increment
このエラーは、C 言語のコンパイラが、インクリメント演算子(++
)の左側に、有効な代入先(左辺値)があると解釈しなかった場合に表示されます。このエラーは、通常、次のような場合に発生します。
- 変数以外をインクリメントする場合
int main() { 5++; // 5 は変数ではないので、インクリメントできません return 0; }
- 配列の要素を単独でインクリメントする場合
int main() { int a[10]; a[5]++; // a[5] は単独ではインクリメントできません return 0; }
- 関数名をインクリメントする場合
int foo() // 関数定義 { return 0; } int main() { foo++; // foo は関数名であり、インクリメントできません return 0; }
このエラーを修正するには、インクリメント演算子の左側に、有効な代入先(変数名や配列の要素を含む可変長式)を指定する必要があります。
invalid lvalue in unary ‘&’
このエラーは、C 言語のコンパイラが、単項参照演算子(&
)の左側に、有効な代入先(左辺値)があると解釈しなかった場合に表示されます。このエラーは、通常、次のような場合に発生します。
- 変数以外を参照する場合
int main() { int *p; p = &5; // 5 は変数ではないので、参照できません return 0; }
- 配列の要素を単独で参照する場合
int main() { int a[10]; int *p; p = &a[5]; // a[5] は単独では参照できません return 0; }
- 関数名を参照する場合
int foo() // 関数定義 { return 0; } int main() { int *p; p = &foo; // foo は関数名であり、参照できません return 0; }
このエラーを修正するには、単項参照演算子の左側に、有効な代入先(変数名や配列の要素を含む可変長式)を指定する必要があります。
invalid preprocessing directive #xxx
invalid preprocessing directive #xxx
というエラーは、C言語のプリプロセッサによって処理される#xxx
という記述が不正であることを示すエラーです。
C言語では、プリプロセッサを使うことで、コンパイル前に実行される記述を行うことができます。プリプロセッサでは、#define
を使うことで、マクロを定義することができます。また、#include
を使うことで、他のファイルをインクルードすることができます。
例えば、以下のようなコードでは、invalid preprocessing directive #define
というエラーが発生します。
#defien A 100 int main(void) { return 0; }
このコードでは、#defien
というプリプロセッサのディレクティブが不正であるため、エラーが発生しています。正しい書き方は#define
です。
また、以下のようなコードでは、invalid preprocessing directive #included
というエラーが発生します。
#included <stdio.h> int main(void) { return 0; }
このコードでは、#included
というプリプロセッサのディレクティブが不正であるため、エラーが発生しています。正しい書き方は#include
です。
これらのように、invalid preprocessing directive #xxx
というエラーは、プリプロセッサのディレクティブが不正である場合に発生します。不正なディレクティブを修正することで、このエラーを解消することができます。
invalid suffix “xxx” on integer constant
invalid suffix "xxx" on integer constant
というエラーは、C言語で整数定数に無効なサフィックスが付いている場合に発生するエラーです。
C言語では、整数定数には、次のようなサフィックスを付けることができます。
u
: unsigned int型を表すl
: long型を表すul
: unsigned long型を表すll
: long long型を表すull
: unsigned long long型を表す
例えば、以下のようなコードでは、invalid suffix "y" on integer constant
というエラーが発生します。
int main(void) { int x = 100y; return 0; }
このコードでは、整数定数のサフィックスとして、y
が使われていますが、これは無効なサフィックスであるため、エラーが発生しています。正しい書き方は、整数定数にはサフィックスを付けず、例えば、int x = 100;
のように記述することです。
このように、invalid suffix "xxx" on integer constant
というエラーは、整数定数に無効なサフィックスが付いている場合に発生します。不正なサフィックスを修正することで、このエラーを解消することができます。
syntax error at end of input
syntax error at end of input
というエラーは、C言語のプログラムに構文エラーがある場合に発生するエラーです。
このエラーが発生すると、プログラムの最後まで構文エラーがあるということを意味します。
例えば、以下のようなコードでは、syntax error at end of input
というエラーが発生します。
int main(void) { printf("Hello, world!" return 0; }
このコードでは、printf
関数の呼び出しの行末に、必要な括弧が欠けているため、構文エラーが発生しています。正しい書き方は、printf("Hello, world!");
のように、行末に必要な括弧を追加することです。
また、以下のようなコードでも、syntax error at end of input
というエラーが発生します。
int main(void) { if (x > 0) { printf("x is positive.\n"); } else printf("x is non-positive.\n"); return 0; }
このコードでは、else
の行末に、必要な複合文が欠けているため、構文エラーが発生しています。正しい書き方は、else { ... }
のように、行末に必要な複合文を追加することです。
このように、syntax error at end of input
というエラーは、プログラムの最後まで構文エラーがある場合に発生します。構文エラーを修正することで、このエラーを解消することができます。
syntax error before ‘xxx’ (token)
syntax error before 'xxx' (token)
というエラーは、C言語のプログラムに構文エラーがある場合に発生するエラーです。
このエラーが発生すると、指定されたトークン(この場合は’xxx’)の前に構文エラーがあるということを意味します。
例えば、以下のようなコードでは、syntax error before 'return' (token)
というエラーが発生します。
int main(void) { retun 0; }
このコードでは、retun
という不正な記述があるため、構文エラーが発生しています。正しい書き方は、return 0;
のように、正しい記述を使うことです。
また、以下のようなコードでも、syntax error before '}' (token)
というエラーが発生します。
int main(void) { if (x > 0) { printf("x is positive.\n"); else printf("x is non-positive.\n"); return 0; }
このコードでは、else
の行末に、必要な複合文が欠けているため、構文エラーが発生しています。正しい書き方は、else { ... }
のように、行末に必要な複合文を追加することです。
このように、syntax error before 'xxx' (token)
というエラーは、指定されたトークンの前に構文エラーがある場合に発生します。構文エラーを修正することで、このエラーを解消することができます。
syntax error before numeric constant
syntax error before numeric constant
というエラーは、C言語のプログラムに構文エラーがある場合に発生するエラーです。
このエラーが発生すると、数値定数の前に構文エラーがあるということを意味します。
例えば、以下のようなコードでは、syntax error before numeric constant
というエラーが発生します。
int main(void) { int x = 100 +; return 0; }
このコードでは、数値定数の後に、必要な演算子が欠けているため、構文エラーが発生しています。正しい書き方は、int x = 100 + y;
のように、数値定数の後に必要な演算子を追加することです。
また、以下のようなコードでも、syntax error before numeric constant
というエラーが発生します。
int main(void) { int x = 100 return 0; }
このコードでは、行末に、必要なセミコロンが欠けているため、構文エラーが発生しています。正しい書き方は、int x = 100;
のように、行末に必要なセミコロンを追加することです。
このように、syntax error before numeric constant
というエラーは、数値定数の前に構文エラーがある場合に発生します。構文エラーを修正することで、このエラーを解消することができます。
syntax error before string constant
syntax error before string constant
というエラーは、C言語のプログラムに構文エラーがある場合に発生するエラーです。
このエラーが発生すると、文字列定数の前に構文エラーがあるということを意味します。
例えば、以下のようなコードでは、syntax error before string constant
というエラーが発生します。
int main(void) { printf("Hello, world!" return 0; }
このコードでは、printf
関数の呼び出しの行末に、必要な括弧が欠けているため、構文エラーが発生しています。正しい書き方は、printf("Hello, world!");
のように、行末に必要な括弧を追加することです。
また、以下のようなコードでも、syntax error before string constant
というエラーが発生します。
int main(void) { printf("Hello, world!"; return 0; }
このコードでは、文字列定数の行末に、必要な括弧が欠けているため、構文エラーが発生しています。正しい書き方は、printf("Hello, world!");
のように、行末に必要な括弧を追加することです。
このように、syntax error before string constant
というエラーは、文字列定数の前に構文エラーがある場合に発生します。構文エラーを修正することで、このエラーを解消することができます。
too many decimal points in number
too many decimal points in number
というエラーは、C言語で小数を表す数値定数に、小数点が多すぎる場合に発生するエラーです。
例えば、以下のようなコードでは、too many decimal points in number
というエラーが発生します。
int main(void) { float x = 3.14.159; return 0; }
このコードでは、3.14.159
という数値定数に、小数点が2つ付いていますが、小数は1つしか持たないため、これは不正な記述であるため、エラーが発生しています。正しい書き方は、float x = 3.14159;
のように、小数点を1つだけ使うことです。
このように、too many decimal points in number
というエラーは、小数を表す数値定数に、小数点が多すぎる場合に発生します。数値定数を修正することで、このエラーを解消することができます。
unterminated comment
unterminated comment
というエラーは、C言語でコメントが終わっていない(終端が無い)場合に発生するエラーです。
C言語では、/*
と*/
で囲むことで、複数行に渡るコメントを記述することができます。しかし、このようなコメントが、*/
で終わっていない場合には、unterminated comment
というエラーが発生します。
例えば、以下のようなコードでは、unterminated comment
というエラーが発生します。
int main(void) { /* This is a comment return 0; }
このコードでは、コメントが*/
で終わっていないため、エラーが発生しています。正しい書き方は、/* This is a comment */
のように、コメントを正しく終端することです。
このように、unterminated comment
というエラーは、コメントが終わっていない場合に発生します。コメントを修正することで、このエラーを解消することができます。
コメント
First off I would like to say fantastic blog!
I had a quick question in which I’d like to ask if you don’t mind.
I was interested to find out how you center yourself and clear your
head prior to writing. I have had a tough time clearing my thoughts in getting my
ideas out there. I truly do take pleasure in writing however it just seems like the first
10 to 15 minutes tend to be wasted simply just trying
to figure out how to begin. Any recommendations or tips?
Thank you!
Have a look at my blog; 출장마사지