I have a variable that is a struct, defined in a .c file:

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

To make it available in other files I have an .h file with:

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

This worked with the Microchip C18 compiler. The XC8 compiler gives an error:

communications.c:24: error: type redeclared
communications.c:24: error: conflicting declarations for variable "out_messages" (communications.h:50)
有帮助吗?

解决方案

The notation isn't correct, you can do:

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

extern Struct_out_messages out_messages;

and in a .c make the initialization.

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

This compiles in XC16 without any problem, hope it does also on XC8.

其他提示

If you need to access the contents of the struct in multiple files, you could change the declaration in the header file to:

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

extern struct out_messages_t out_messages;

and then in your .c file, define and initialise:

struct out_messages_t out_messages = {0, 0};

(and include the header)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top