Reputation: 33697
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)
Upvotes: 2
Views: 4693
Reputation: 121
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.
Upvotes: 3
Reputation: 8195
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)
Upvotes: 2