いいえ、Cではありません。C++でこれを実行できると思います。つまり、構造のすべてのインスタンス間で共有されるコピーが1つあるということです。a
struct str
Cで同様のことをしたい場合は、いくつかのオプションがあります(もっとあるかもしれませんが、現時点ではそれらについて考えることはできません)。
1つ目は、次のような共通変数を分割することです。
int struct_str_static_a;
struct str {
int b;
} s;
このように、構造のすべてのインスタンスで共有されるコピーは1つだけです。a
各インスタンスは、引き続き独自のコピーを取得しますb
。
これに対するわずかな変更は、その共通変数へのポインターを導入し、ポインターを初期化することです。
int struct_str_static_a;
struct str {
int *pA;
int b;
} s;
:
s.pA = &struct_str_static_a;
次に*(s.pA)
、以前使用していた場所を使用できますs.a
。のすべてのインスタンスには、単一のを指すstruct str
独自のポインタがあるため、同様の効果が得られます。しかし、それは続くべき困難な道です。pA
a
3番目のオプションは、次のISO Cワーキンググループに参加し、これを言語の変更として提案することです。しかし、それは今後10年ほどの間、あなた自身からかなりの努力を必要とするでしょう、おそらく努力の価値はありません:-)