0

私は4つのファイル= pic.h、main.c、framehandle.c、framehandle.hを持っています

pic.h と framehandle.h の両方がメインに含まれています。

#include "pic.h"
#include "framehandling.h"

pic.h には、次の構造体定義があります。

struct f
{
    unsigned sleep : 1;
    unsigned push  : 1;
    unsigned rx    : 1;
    unsigned tx    : 1;
    unsigned validPacket : 1;
};

この構造体を main.c ファイルで次のように宣言します。

struct f flag; 

これをframehandle.c内で使用しようとすると、宣言されていないエラーが発生しますが、これは理解できます。

これを解決するために、framehandle.h 内に次を追加します。

extern struct f flag;

ただし、コンパイラは、framehandle.c 内でフラグが宣言されていないとまだ不平を言っています。

私は何を間違っていますか?構造体 f フラグを拡張しません。コンパイラに宣言の場所を探すように指示することになっていますか? これを件名ヘッダー内に配置するのは正しい場所ではありませんか?

- 編集 -

インクルード ファイルのシーケンスと変数宣言を追加しています

#include "pic.h"
#include "framehandling.h"

struct f flag;

void main(void)
{ }
4

2 に答える 2

0

struct f flag;main.c でグローバルまたはローカルとして宣言したかどうかによって異なります。関数内で宣言している場合は、宣言を関数の外に移動する必要があります。

于 2013-04-15T14:07:07.577 に答える