2

構造体の定義を非表示にしたいので、次のようにソース ファイルで構造体を定義します。

//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_tint 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;

なぜこれが失敗するのですか?

4

3 に答える 3

1

構造体定義を非表示にしたい場合、ユーザーはその型のポインタしか定義できず、構造体インスタンスを作成する API (malloc による) と構造体インスタンスを解放する API (フリーによる) を実装する必要があります。

于 2019-12-04T02:49:55.360 に答える