1

次のコードを含む単純なヘッダー ファイルがあります。

#include < stdio.h >
#include < pthread.h >

void init(struct prodcons * b);

void put(struct prodcons * b, int data);

int get(struct prodcons * b);

void * producer(void * data);

void * consumer(void * data);

ターミナルをコンパイルすると、次の 4 つの警告が表示されます。

producer_consumer.h:4:18: aviso: ‘struct prodcons’ declared inside parameter list [enabled by default]
producer_consumer.h:4:18: aviso: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
producer_consumer.h:6:17: aviso: ‘struct prodcons’ declared inside parameter list [enabled by default]
producer_consumer.h:8:16: aviso: ‘struct prodcons’ declared inside parameter list [enabled by default]
4

3 に答える 3

1

struct prodconsどこかに宣言する必要があります。現在、それに対する宣言がないため、コンパイラはそれを推測しています。

おそらく、別のファイルにこれに対する宣言があります。別のヘッダーにある場合は、#includeそれを使用するすべての関数の前に、この .h ファイルの先頭にディレクティブを追加します。

于 2013-11-01T00:30:02.417 に答える
1

コンパイラは、「struct prodcons」の宣言が欠落していると文句を言います。実際にその構造体の宣言を行うヘッダー ファイルを含めるか、次のようにその構造体の前方宣言を挿入する必要があります。

struct prodcons;
于 2013-11-01T00:32:39.537 に答える
0

struct prodconsどこにも定義されていません。#includeこれらのプロトタイプ、またはそれを定義するヘッダー ファイルの前に定義する必要があります。

パラメータリストはコンパイラが最初に見たstruct prodconsものであるため、そこで宣言していると想定します (これは意味がありません)。

于 2013-11-01T00:29:28.190 に答える