ライブラリに定義された関数と構造体があります。関数が構造体へのポインターを返すようにします。プログラムとライブラリをコンパイルしようとすると、次のエラーが発生します。
error: incomplete definition of type 'struct _bmpfile'
printf("file size: %d", bmp->header.filesz);
~~~^
/usr/local/include/bmpfile.h:116:16: note: forward declaration of 'struct _bmpfile'
typedef struct _bmpfile bmpfile_t;
構造体は bmpfile.h で宣言され、bmpfile.c で定義されます。私のプログラム main.c は、bmpfile_t を返す次の関数を呼び出します。
bmp = bmp_create_from_file(filename);
bmpfile_t*
bmp_create_from_file(const char *filename)
{
FILE *fp;
fp = fopen(filename, "r");
if (fp == NULL) perror("error");
bmpfile_t *bmp = (bmpfile_t *)malloc(sizeof(bmpfile_t));
bmp_get_header_from_file(fp, bmp);
bmp_get_dib_from_file(fp, bmp);
bmp_get_pixels_from_file(fp, bmp);
fclose(fp);
return bmp;
}