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 に答える