

中嶋悟
名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝
externとグローバル変数の違いを徹底解説|中学生にも分かる実例つき
プログラムを書くとき、外から使える変数があると便利です。しかしどこでどう使われるかを決める仕組みがあり、覚えておくと後で困らなくなります。ここで大事になるのが extern とグローバル変数という言葉です。
extern は他のファイルで定義されている変数を参照するための宣言であり、実体は別の場所にあります。これに対しグローバル変数は関数の外で宣言され、プログラム全体で共有される変数です。つまり extern は宣言だけで実体は別ファイルにあるという性質を持ち、グローバル変数は実体と参照が同じファイルで扱われるという性質を持つと理解すると良いでしょう。
この違いを理解しておくとビルド時のエラーを減らせます。忘れがちなのは extern を使うときは「一つの場所でだけ変数を定義する」というルールを守ることです。複数箇所で定義すると重複定義エラーが発生します。従って外部とのつながりを作るときは宣言と定義の場所を明確に分けて設計しましょう。
次に実務的な場面を考えます。A.c で int count = 0; と実体を作り、B.c で extern int count; と宣言します。これで B.c は count の存在を知るだけで、値の作り手にはなりません。実体を A.c が持っているため、B.c と A.c が同じ変数を共有します。ここが extern の「協調動作」の部分です。もう少しややこしく感じるのは、別ファイルで同じ名前の変数を別に定義してしまうと リンクエラー になる点です。こうしたトラブルを避けるにはコード設計の初期段階で変数の定義箇所と宣言箇所を厳密に分け、ビルド設定を統一することが重要です。
プログラムが大きくなるほどこの設計が効いてきます。
用語の整理:グローバル変数と extern の役割
グローバル変数とは、プログラム全体から参照できる変数のことです。関数の外で宣言され、どのファイルからもアクセス可能ですが、同じ翻訳単位内でのみ有効です。extern は別ファイルで定義された変数を使うときに用いる宣言です。宣言だけを行い、実体は別のファイルにあることを示します。この組み合わせは大規模なソフトウェア開発でとても役に立ちます。宣言と定義を分けることで、複数ファイルのコードをうまく結びつけられ、保守性が高まります。
この整理を頭に置いておくと、後でコードを読んだときに「どこで変数が作られているのか」「どのファイルが参照しているのか」がすぐ分かります。初心者にとっては最初は難しく感じるかもしれませんが、宣言と定義を明確に分ける癖をつけると、エラーの原因を自分で追いやすくなります。
結果として、クラスター構成の大きなプログラムでもミスが減り、動くまでの時間を短縮できるのです。
実際のコードでの違いの例
現実のプロジェクトでは extern を使って複数のファイル間で変数をやり取りします。例えば fmain.c で int total = 100; と定義します。futil.c では extern int total; と宣言します。これにより futil.c は total の実体を知っていて使えるのですが、自分で総計を作る実体は持ちません。こうしてメインのファイルが総計を管理し、補助ファイルは参照だけを行う動きが成立します。
この仕組みを誤って使うと問題が生まれます。たとえば total の定義がもう一つのファイルにもあるとリンク時に「重複定義」というエラーが出ます。あるいは extern の宣言が実体と一致していないと「型が違う」などの別のエラーが出ます。つまり きちんと宣言と定義の対応を合わせることが何より大切です。
koneta: extern の話をしているとき、友達の家の鍵の渡し方を思い出すんだ。ある部屋には大事な箱があって、それを使いたい人は必ず鍵を使う前に『この箱は別の部屋にある実体です』と宣言する。extern はその宣言だけを別の部屋に伝える役割。だから宣言された部屋は実体を作らなくて済み、他の部屋の人は参照だけを行う。これが大事なポイント。もし同じ名前の箱を複数の部屋で独立して作ってしまうと、鍵を誰が持っているのか、誰が箱の中身を更新しているのかが分からなくなり、混乱が生まれる。extern を使うと「どこで実体を作るか」を決めておけば、他の部屋はその実体を共有できる。実務ではこの共有の仕組みがソフトの規模を大きく左右するんだ。
前の記事: « 外部と内部の違いをわかりやすく解説!日常の例で学ぶ基礎と応用