struct'在参数列表中使用头文件声明

时间:2013-11-01 00:28:12

标签: c

我有一个简单的头文件,其中包含以下代码:

#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);

当我编译终端时给出这四个警告:

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]

3 个答案:

答案 0 :(得分:1)

您需要在某处声明struct prodcons。现在没有声明它,所以编译器推断它。

大概你在另一个文件中有一个声明 - 如果它在另一个标题中,在它使用它的所有函数之前,在它.h文件的顶部添加一个#include指令。

答案 1 :(得分:1)

编译器抱怨&#34; struct prodcons&#34;缺少声明。你必须包含一个实际给出该结构声明的头文件,或者你必须插入该结构的前向声明,就像写:

struct prodcons;

答案 2 :(得分:0)

struct prodcons尚未在任何地方定义。您需要在这些原型之前定义它,或#include定义它的头文件。

由于参数列表是编译器第一次看到struct prodcons,因此它假设您在那里声明它(这没有任何意义)。