ちょっとした思いつきで、こういうスタイルのC言語入門はどうかと書いてみた。
このノリを貫き通すのは大変だが…。
記憶クラスとスコープ
C言語では、変数に記憶クラスとスコープという考え方がある。
これを、下世話に表現すると、以下のようになる。
auto 自動変数 キャバクラのお姉さん。
static 静的変数 出張先の愛人。
register レジスタ変数 合コンの相手。
extern 大域変数 本妻。
記憶クラスexternは、大域変数を宣言する。
これは言ってみれば本妻のようなもので、全国どこに行っても存在が消えることはない。
しかも、どこからも(その気があれば)アクセス可能である。
記憶クラスstaticは、静的変数を宣言する。
これは言ってみれば出張先にいる愛人のようなもので、存在自体は消えることはないが、アクセスできる範囲が限られている。
アクセスするにはそこに行く必要があるが、次に訪れた際も忘れずに、別れたときのままにいてくれる、非常に都合のよい存在だ。
記憶クラスautoは、自動変数を宣言する。
これは言ってみればキャバクラのお姉ちゃんのようなもので、そこに行かないと会えないが、行けば自動的に確保される。
ただし、前のことはすっかり忘れていることも多いし、同一人物とも限らない。
(※キャバクラには行ったことがないので、あくまでも想像である)
最後の記憶クラスregisterは、レジスタ変数を宣言する。
これは行ってみれば合コンの相手のようなもので、使えるか使えないかは、様々な要因で決まってしまう。
変数(≒男性)の数に比べて圧倒的にレジスタ(≒女性)は少ないことが多い。
希望しても適わないことが多く、通常はすでに割り当てが決まっていることが一般的である。
(※合コンには行ったことがないので、あくまでも想像である)
もう少し掘り下げてみよう。
大域変数と静的変数は、どこに行ってもその存在が消えることはない。
これに対して、自動変数は関数(≒キャバクラ)内部でのみ存在する。
大域変数と静的変数は、同じ名前ならば原則同じ人物を差す。
これに対して自動変数は、同じ名前でも同じ人物(≒メモリ位置)とは限らない。
これをスコープと言うところから見ると、どうなるか。
わかりやすく、すべて同じ名前であるとしよう。
大域変数Xが東京で宣言されていれば、Xは日本全国からアクセスできる。
しかし、静的変数Xが北海道で宣言されている場合、静的変数Xによって北海道では大域変数Xの存在が見えなくなってしまう、つまり忘れられてしまうのである。
しかし、そこにFというキャバクラがあって、もしXという自動変数がいたら、なんと静的変数Xも見えなくなってしまう、つまり忘れられてしまうのである。
東京の大域変数Xは、北海道では静的変数Xの前に霞み、さらにススキノのキャバクラ嬢Xの前には、それも霞んでしまうのである。
まさに恐るべしといった感じだが、私にはまったく実感の湧かない話だ。
何だか疲れる話なので、このへんにしておこう。
しかし、無理があるな、このこじつけには。