I want to hide the struct define, so I define struct in the source file, like this :
//a.c
#include "a.h"
struct a_s
{
   int a;
   int b;
};
int func(a_t *a)
{
   printf("%d\n", a->a);
   return 0;
}
and I declare the struct in the header file, like this:
//a.h
#ifndef TEST
#define TEST
#include <stdio.h>
#include <stddef.h>
typedef struct a_s a_t;
#endif
Then I use the struct a_t int main.c file, like this:
#include "stddef.h"
#include "a.h"
int main()
{
   a_t a;
   a.a =2;
   func(&a);
   return 0;
}
But when I compile the main.c by gcc -c main.c, it failed by
main.c: In function ‘main’:
main.c:7:15: error: storage size of ‘a’ isn’t known
    struct a_s a;
Why is this failing?
 
     
     
    