使用extern结构时XC8中的声明冲突

时间:2013-03-11 20:54:52

标签: c embedded pic18 mplab

我有一个变量,它是一个结构,在.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)

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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};

(并包括标题)