0

C ヘッダー ファイルとソース ファイルを理解できません。私は持っている:

何か.c

#include <stdio.h>
#include "something.h"

typedef struct {
    int row, col;
} point;

point
whereispoint(point **matrix, int rows, int cols)
{
   ..... Does something ....
   printf("something...");
}

何か.h

typedef struct point * p;

p whereispoint(p **matrix, int rows, int cols);

main.c

#include <stdio.h>
#include "something.h"

int
main(void)
{
   int row, col;
   p **matrix=malloc(bla, bla);
   .....Something.....
   p=whereispoint(matrix, row, col);
   return 0;
}

これをコンパイルする方法が実際にわからないとき...試してみgcc -c main.c something.c ましたが、うまくいきません。個別にコンパイルしようとしましたgcc -c main.cgcc -c something.cmain.cは機能しますが、something.cは機能しません。

私は実際にsomething.cからライブラリを作成しようとしていますが、それをオブジェクトコードにコンパイルすることさえできないので、何をすべきかわかりません。構造体型とsomething.hのtypedefに何か問題があると思いますが、が原因かわかりません...

4

2 に答える 2

2

ヘッダーでは、関数は(the )whereispoint()を返すように宣言されていますが、定義はポインタではなく を返します。struct point*typedef pstruct point

個人的には、ポインタは紛らわしいと思います。ポインタを表すために を使用するとtypedef、コード内でより明確になると思います。*

/* header */
typedef struct point point_t;

point_t* whereispoint(point_t** matrix, int rows, int cols);

/* .c */
struct point {
    int row, col;
};

point_t* whereispoint(point_t** matrix, int rows, int cols)
{
   ..... Does something ....
   printf("something...");
   return ??;
}
于 2012-11-01T17:49:10.327 に答える
0

以下:

typedef struct {
  int row, col;
} point;

型ポイントに名前のない構造体を typedef します。

something.h では、「構造体ポイント」(未定義の構造体型参照) を「*p」に typedef します。

通常、実装を隠そうとするのではなく、ヘッダー ファイルですべての「インターフェイス タイプ」を定義する必要があります (C は、何かにアクセスするために実装を知る必要があります)。

something.h で次のようにしてみてください:

typedef struct point {
  int row, col;
} *p;

または、typedef がどのように機能するか正確にわからない場合は、単純に次のようにします。

 struct point {
  int row, col;
}

それは構造体型を宣言します。

于 2012-11-01T17:49:38.230 に答える