C言語の静的構造体のメンバ変数について質問があります。
静的構造体を宣言できると誰かが言った
正しい/合法:
// (global scope)
static struct t_struct {
int a;
} THE_STATIC_VARIABLE;
しかし、C では、struct は C++ の class のような静的メンバーを持ちません。
// (global scope)
struct t_ill_struct {
static int a; // << ill-formed in C, but valid in C++
};
これは何を意味するのでしょうか?静的構造体を宣言すると、メンバー変数のステータスはどうなりますか? 誰かがこれについて私を助けることができますか?
上記の例を使用するTHE_STATIC_VARIABLE
と、静的ストレージがあることを意味します。以下は同等です。
あ
// (global scope)
static struct t_struct {
int a;
} THE_STATIC_VARIABLE;
B
// (global scope)
struct t_struct {
int a;
};
static struct t_struct THE_STATIC_VARIABLE;
つまり、THE_STATIC_VARIABLE
の定義を参照するすべての翻訳は、独自のコピーを取得します。
静的 C++ メンバーと同じ効果が必要な場合は、別のスコープ (構造体の宣言の外) で宣言する必要があります。
// file.h
// (global scope)
struct t_struct {
int a;
};
extern struct t_struct THE_GLOBAL_VARIABLE;
// file.c
struct t_struct THE_GLOBAL_VARIABLE;
これで、C++ のように 1 つだけになりました。