C 基本講座

externで変数を参照する

LinkedInラーニングの無料トライアルを今すぐ試そう

無料で視聴する すべての加入プランを見る
このレッスンでは、extern記憶クラス指定子を用いて、他のファイルに記述されているグローバル変数を参照する方法について説明します。
講師:
07:10

字幕

このレッスンでは、extern 記憶クラス指定子を用いて他のファイルに記述されているグローバル変数を参照する方法について説明します。このプログラムは配列を使ってスタックを実現するものです。stack.c にはデータをスタックに入れるpush 関数とスタックからデータを取り出すpop 関数が記述されています。また、main.c では main 関数を記述しpush 関数と pop 関数を呼んでいます。そして ヘッダーファイルの main.h にはpush 関数と pop 関数のプロトタイプ宣言が記述されています。内容的には1つ前のレッスンで作成したプログラムと同一のものになります。では、保存して実行してみます。実行すると、このように後入れ先出しで処理が行われることが確認できます。スタックの機能は push と pop の2つの関数で実現されるので普通はこのまま1つのファイルに2つの関数を記述しておいて問題はありませんがここでは更にこれらを2つのファイルに分割したいと思います。それでは新たにソースファイルを作成します。まず push 関数を記述するpush.c を作ってください。それから、pop 関数を記述するpop.c を作ってください。 ヘッダーファイルも作成しましょう。stack.h という名前にします。この stack.h にはこのマクロ定義をコピーしましょう。ヘッダーファイルにはマクロ定義やプロトタイプ宣言、そして構造体の定義や列挙体の定義などを記述します。構造体と列挙体については次のチャプターで学習します。このマクロの max はこちらの main.h で記述することも考えられますがこの例では main と push、pop3つのファイルしかないのですが仮にもっと沢山のファイルが記述されたシステムの場合main.h は色々なソースファイルからinclude されるので局所的に用いるものは別にヘッダーファイルを作成してそこに記述した方がいいでしょう。そのため、この stack.h にマクロ max を記述しそして、この push.c と pop.c にそれぞれ include します。では次に、この stack.c の中にあったこのグローバルな定義とそれから push 関数をコピーしてpush.c に貼り付けてください。今この stack.h を保存するとこの max のエラーは消えます。それから、stack.c にあったpop 関数をコピーしてpop.c に貼り付けます。 この stack.c は不要になってしまったので削除しておきましょう。このような形でできあがりました。けれども、この pop.c の中でエラーが出ています。この push.c の中にあるグローバルな変数をこの pop.c では参照することができないのでエラーになっています。これでは困りますのでソースを修正します。さて、この stack と sp ですがヘッダーファイルに記述することも考えられますが実はそれはいけません。グローバルな領域のオブジェクトはシステムで1つしか許されないのですがヘッダーファイルにグローバルな領域の定義を書くとこの include したそれぞれのファイルで定義ができてしまいます。ですから、ここでは extern という記憶クラス指定子をつけて宣言することにします。この push.c にあるこの2つのグローバルな定義をコピーしたらstack.h で貼り付けてください。そして、extern という記憶クラス指定子を先頭に付けてください。この時、このように初期化子を書いているとここで定義ができてしまいますのでこの初期化子は必ず削除しておいてください。この extern という記憶クラス指定子ですがこれは、そこには実体が無いが別のソースファイルにあることを意味します。 そのため、このヘッダーファイルをinclude した pop.c ではこの stack と sp を、ここには無いが別のソースファイルにありますよ、と宣言することになるのでコンパイルすることができるようになるのです。コンパイルしてみます。今度はエラー無くコンパイルができました。実行もできますね。このレッスンでは、extern 記憶クラス指定子を用いて他のファイルに記述されているグローバル変数を参照する方法について説明しました。

C 基本講座

C言語はUNIXというOSを記述するために開発されたプログラミング言語で、組み込みシステムの開発を中心に今も使われています。このコースでは簡単なプログラムを作成しながら、C言語の基本的な文法を学びます。データ型や制御文などの基礎的な文法からポインタや構造体といったC言語の特徴的な内容まで幅広く取り上げます。よく使われる標準ライブラリ関数も数多く紹介します。

5時間45分 (60 ビデオ)
現在、カスタマーレビューはありません…
ソフトウェア・トピック
プラン加入者限定
発売日:2017年11月05日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。