0

OSを実行していないマイクロコントローラー用のCプログラムに多数のモジュールがあります。各モジュールには、モジュールのステータスを表す独自の型定義、列挙、およびデータ構造体定義があり、モジュールの関連するヘッダー ファイルでそれらを定義するのが適切だと思います。

次に、グローバル変数を global_var.c に定義して、システム全体の現在のステータスを「記憶」します。モジュールのデータ構造はグローバル変数の定義で参照されているため、すべてのモジュール ヘッダーが global_var.h に含まれています。

ただし、これらのモジュールもグローバル変数にアクセスする必要があるため、global_var.h も含める必要があります。

グローバル変数を保持したい場合、ヘッダー ファイルの相互インクルードを回避するにはどうすればよいですか?

どうもありがとう!

global_var.h

#ifndef GLOBAL_VAR_H
#define GLOBAL_VAR_H
#include "module.h"

typedef struct GLOBAL_STRUCTURE {
    module_structure m;        
} global_structure;
#endif

global_var.c

#include "global_var.h"
global_structure gs;

モジュール.h

#ifndef MODULE_H
#define MODULE_H
typedef struct MODULE_STRUCTURE {
    int a;
} module_structure;

void module_function(void);
#endif

module.c

#include "global_var.h"
extern global_structure gs;

void module_function(void) {
    gs.m.a=0;
}
4

2 に答える 2

0

これを試してください: Module.c で #define XYZ

次にModule.hで

    #define MODULETYPE
    #ifdef XYZ
     MODULETYPE 

    #else
    MODULETYPE extern
   #endif
   MODULETYPE  int var1,var2;

すべてのモジュールに対してこれを行い、必要な場所にヘッダーを含めます。

于 2013-08-31T14:02:17.160 に答える
0

C 言語は、2 回定義されたグローバルを共有することになっていると思います。しかし、あなたのツールチェーンが実際にそれを行うかどうかについては、コンパイラ(まあリンカー)に依存します。最も安全な方法は、変数を 1 回だけ宣言し、それ以外の場合は明示的に extern として宣言することです。多くの場合、これは次のように行われます。

common.h

#ifundef HELLO
#define HELLO
#endif
HELLO unsigned int myglobx;

one.c

#include "common.h"

2.c

#include "common.h"

three.c

#define HELLO extern
#include "common.h"
于 2013-08-30T14:27:56.287 に答える