【发布时间】:2015-12-04 06:52:22
【问题描述】:
之前有人问过这个问题,但似乎没有一个解决方案适用于我的代码。这是我的主文件server.c:
#include <stdlib.h>
#include <unistd.h>
#include "message.h"
int main(int argc, char *argv[]) {
// do stuff
return 0;
}
这是我包含的文件message.c:
#include <stdlib.h>
#include <unistd.h>
struct message_t {
int field1;
int field2;
};
int sendMessage(struct message_t *message) {
// do stuff
return 0;
}
我还有一个头文件message.h:
#include <stdlib.h>
#include <unistd.h>
struct message_t {
int field1;
int field2;
};
int sendMessage(struct message_t *message);
当我编译 server.c 和 message.c 时,我在声明 sendMessage 的行中收到 message.c 的警告:
警告:在参数列表中声明了“struct message_t”
警告:它的作用域只是这个定义或声明,可能不是你想要的
“在参数列表中声明”是什么意思?它所指的参数列表是什么?
【问题讨论】:
-
对于哪个文件和哪一行收到警告?为什么在 message.c 中定义
struct message_t?您应该包含 message.h。 -
... 哪一行?编辑您的问题,不要发布 cmets。-
-
从除
message.h之外的所有文件中删除声明struct message_t { int field1; int field2; };。并在您的 .c 文件中包含 message.h。然后它应该编译。 -
你发布的代码
server.c应该抱怨struct message_t的重新定义你确定这段代码正是你正在编译吗? -
您发布的代码不会生成此警告。仅当您从 message.c 中删除声明时才会这样做(问题已解释 here )。请编辑您的问题以减少混乱,我将删除我的反对票。