2013-03-11 34 views
2

衝突的時候在XC8聲明我有一個變量,它是一個結構,在.c文件中定義:使用的extern結構

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) 

回答

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上編譯。

+0

奇怪的是,沒有(後者)。它給了我'communications.c:18:錯誤:在聲明中沒有標識符。我想知道我是否錯過了其他的東西。 – AndreKR 2013-03-11 21:35:58

+0

然後使用typedef,這將工作沒有任何問題。 – user1368116 2013-03-11 21:41:44

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}; 

(和包括頭)