構造体の定義を非表示にしたいので、次のようにソース ファイルで構造体を定義します。
//a.c
#include "a.h"
struct a_s
{
int a;
int b;
};
int func(a_t *a)
{
printf("%d\n", a->a);
return 0;
}
次のように、ヘッダー ファイルで構造体を宣言します。
//a.h
#ifndef TEST
#define TEST
#include <stdio.h>
#include <stddef.h>
typedef struct a_s a_t;
#endif
次に、struct a_t
int main.c ファイルを次のように使用します。
#include "stddef.h"
#include "a.h"
int main()
{
a_t a;
a.a =2;
func(&a);
return 0;
}
しかし、main.c を でコンパイルするとgcc -c main.c
、失敗しました。
main.c: In function ‘main’:
main.c:7:15: error: storage size of ‘a’ isn’t known
struct a_s a;
なぜこれが失敗するのですか?