私は自分のファイルの1つでグローバル変数のペアを使用しており、それぞれ2つの異なるファイル(1つのファイル、2つの方法で前処理)の1つの宣言.c
に一致しています。1つは公的消費用で、もう1つは私的使用用です。どちらも変数です。extern
.h
.h
const
.c
ファイル内の変数の1つだけを初期化し、2番目の変数を同じコンテンツに割り当てたいだけです。.c
現時点でのファイルの関連コンテンツは次のとおりです。
struct List_methods const List = {
.create = List__create,
.create_naughty = List__create_naughty,
// …
};
struct List_methods const Paws__List = List;
…および対応する.h:
#if defined(EXTERNALIZE)
# define List_methods Paws__List_methods
# define List Paws__List
#endif
// …
struct List_methods {
list (*create) (void);
list (*create_naughty) (void);
// …
} const extern List;
#if defined(EXTERNALIZE)
# undef List_methods Paws__List_methods
# undef List Paws__List
#endif
ここでの目標は、が定義済みに.h
含まれている場合、インクルードファイルが変数にアクセスできるようにすることです。'dは私のファイルの定義にアクセスします。ただし、その定義なしで含まれている場合は、代わりに'dにアクセスできます(これは内部ファイルで使用する予定であり、必要に応じて利用できるようにします)。EXTERNALIZE
Paws__List
extern
.c
extern
List
#include
しかし、Paws__List = List
私のコンパイラでは割り当てが爆発し、次のエラーが発生します。
Source/Paws.o/list/list.c:32:40: error: initializer element is not a
compile-time constant
struct List_methods const Paws__List = List;
^~~~
上記のようにこの機能を実現するために役立つ情報を探しています(つまりconst
、ファイル内の同じ構造体に2つの名前を定義して、どちらか一方をヘッダー.c
で参照できるようにします)。.h