LoginSignup
1
0

More than 3 years have passed since last update.

C言語の記憶クラスを下世話に理解する

Posted at

C言語では、変数に記憶クラススコープという考え方があります。
これを、下世話に表現してみましたのが、下の表です。

宣言子 分類 下世話的表現
auto 自動変数 キャバクラのお姉さん。
static 静的変数 出張先の愛人。
register レジスタ変数 合コンの相手。
extern 大域変数 本妻。

記憶クラスexternは、大域変数を宣言します。
これは言ってみれば本妻のようなもので、全国どこに行っても存在が消えることはありません。
しかも、どこからも(その気があれば)アクセス可能です。

記憶クラスstaticは、静的変数を宣言します。
これは言ってみれば出張先にいる愛人のようなもので、存在自体は消えることはありませんが、アクセスできる範囲がその地域に限られています。
アクセスするにはそこに行く必要がありますが、次に訪れた際も忘れずに、別れたときのままにいてくれる、非常に都合のよい存在です。

記憶クラスautoは、自動変数を宣言します。
これは言ってみればキャバクラのお姉ちゃんのようなもので、そこに行かないと会えませんが、行けば自動的に確保されます。
ただし、前のことはすっかり忘れていて、まず同一人物ではありません。
(※キャバクラには行ったことがないので、あくまでも想像です)

最後の記憶クラスregisterは、レジスタ変数を宣言します。
これは言ってみれば合コンの相手のようなもので、使えるか使えないかは、様々な要因で決まってしまいます。
変数(≒男性)の数に比べて圧倒的にレジスタ(≒女性)は少ないことが多いです。
希望しても適わないことが多く、通常はすでに割り当てが決まっていることが一般的です。
(※合コンには行ったことがないので、あくまでも想像です)

もう少し掘り下げてみましょう。
大域変数と静的変数は、どこに行ってもその存在が消えることはありません。
これに対して、自動変数は関数(≒キャバクラ)内部でのみ存在します。
大域変数と静的変数は、同じ名前ならば原則同じ人物を差します。
これに対して自動変数は、同じ名前でも同じ人物(≒メモリ位置)とは限りません。

これをスコープと言うところから見ると、どうなるでしょうか。
わかりやすく、すべて同じ名前であるとしましょう。
大域変数MidoriがTokyoなどプログラムのどこで宣言されていても、Midoriは日本全国からアクセスできます。
しかし、静的変数MidoriがファイルHokkaidoで宣言されている場合、静的変数MidoriによってHokkaidoでは大域変数Midoriの存在が見えなくなってしまいます。つまり忘れられてしまうのです。
しかし、Hokkaidoに関数Susukinoというキャバクラがあって、もしMidoriという自動変数がいたら、なんと静的変数Midoriも見えなくなってしまいます。つまり忘れられてしまうのです。
Tokyoの大域変数Midoriは、Hokkaidoでは静的変数Midoriの前に霞み、さらにSusukinoのキャバクラ嬢Midoriの前には、それも霞んでしまうのです。
まさに恐るべしといった感じですが、私にはまったく実感の湧かない話です。

何だか疲れる話なので、このへんにしておきましょう。
しかし、無理がありますね、このこじつけには。

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0