以下に示すように、構造体要素の配列を作成しようとしています。
#include <stdio.h>
#include <stdlib.h>
struct termstr{
double coeff;
double exp;
};
int main(){
termstr* lptr = malloc(sizeof(termstr)*5);
return 0;
}
これをコンパイルすると、次のようなエラーが発生します。
term.c: In function ‘main’:
term.c:11:1: error: unknown type name ‘termstr’
term.c:11:31: error: ‘termstr’ undeclared (first use in this function)
ただし、コードを次のように変更すると、通常どおりコンパイルされます。
#include <stdio.h>
#include <stdlib.h>
typedef struct termstr{
double coeff;
double exp;
}term;
int main(){
term* lptr = malloc(sizeof(term)*5);
return 0;
}
typedef (型名を term として) を追加し、struct の名前を termstr に変更し、ポインターの型として term* を使用してメモリを割り当てています。
そのような状況、つまり構造体の配列を作成する場合、typedef は常に必要ですか? そうでない場合、最初のコードでエラーが発生したのはなぜですか? 構造体の単一のインスタンスを作成して使用するには、typedef も必要ですか?