2

我有一个结构变量,在 .c 文件中定义:

struct {
    int write_cursor;
    int read_cursor;
    message messages[10];
} out_messages = {0, 0};

为了使它在其他文件中可用,我有一个 .h 文件:

extern struct {
    int write_cursor;
    int read_cursor;
    message messages[10];
} out_messages;

这适用于 Microchip C18 编译器。XC8 编译器给出错误:

communications.c:24: error: type redeclared
communications.c:24: error: conflicting declarations for variable "out_messages" (communications.h:50)
4

2 回答 2

3

符号不正确,您可以这样做:

typedef struct {
    int write_cursor;
    int read_cursor;
    message messages[10];
} Struct_out_messages;

extern Struct_out_messages out_messages;

并在 .c 中进行初始化。

Struct_out_messages out_messages = {0, 0, {0}};

这在 XC16 中编译没有任何问题,希望在 XC8 上也可以。

于 2013-03-11T21:24:17.667 回答
2

如果您需要访问struct多个文件中的内容,您可以将头文件中的声明更改为:

struct out_messages_t {
    int write_cursor;
    int read_cursor;
    message messages[10];
};

extern struct out_messages_t out_messages;

然后在您的 .c 文件中,定义并初始化:

struct out_messages_t out_messages = {0, 0};

(并包括标题)

于 2013-03-11T21:18:42.770 回答