C 基本講座

変数の通用範囲について

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

無料で視聴する すべての加入プランを見る
このレッスンでは、変数の使える範囲である「通用範囲」ついて説明します。
講師:
09:40

字幕

このレッスンでは、変数の使える範囲である通用範囲について説明します。通用範囲とは、その変数を参照できる範囲のことでスコープとも呼ばれます。C 言語では変数の宣言をソースプログラムのどこに書くかによってローカル変数とグローバル変数に分けられ通用範囲が異なってきます。ローカル変数は局所変数とも呼ばれ関数内で宣言され、その関数内でのみ使用可能です。複数の関数が同一の変数名を用いても構いません。また、グローバル変数は、広域変数とも呼ばれ関数外で宣言され、宣言以降の全関数で使用可能です。同一名のグローバル変数が複数存在することはできません。なお、このローカル変数とグローバル変数というのはプログラミング上用いられている一般的な呼び名でありC 言語の仕様ではありません。では、これらの変数をプログラムで確認してみましょう。このプログラムには、main 関数とfunc1 関数のそれぞれで変数 no が宣言されています。これはローカル変数で、それぞれ別々のメモリ領域に値を持ちます。実行してみると実行するとこのようにfunc1 の中の no は 456 ですがmain 関数の中で func1 を呼ぶ前と呼んだ後で no を確認すると両方とも 123 になっています。 それぞれ値が違うのはそれぞれこの no が別々の領域に確保されているからです。このように func1 の中の no を2に書き換えるとmain 関数からは使用することができません。ローカル変数が使用できるのは宣言した関数の中だけなのでこのように func1 の no2 をmain 関数で参照することはできません。ここは戻しておきましょう。関数の引数もローカル変数なのでこの func1 に引数を付けno を渡してみます。そして、この引数を456 で書き換えるようにしてみます。ここで、この引数の no を456 に書き換えてみてもmain の no に影響はありません。値渡しした仮引数とmain の変数は名前は一緒でも別のものだからです。次に、新たにmain 関数の方にno2 を追加してみましょう。これを参照します。この場合、特に問題なく実行できますね。ANSI-C ではローカル変数はこの { } で囲まれたブロックの先頭で実行文よりも前に宣言する必要がありました。1999 年に制定された C99 からは使用する前ならばどこでも宣言が可能になりました。ですから、この no2 の宣言を切り取ってこの表示する直前に移しても問題なく、このプログラムは実行することができます。 また、C 言語のローカル変数は関数ブロックの中だけではなくif や for のような制御構造のブロックの中で宣言した場合もブロックの中がスコープになります。ですから、このように記述することができます。例えば、この場合、no よりもno2 の方が大きい場合に両者を入れ替えるとします。このとき、作業用の temp をブロックの中で宣言すればこのブロックの中だけがtemp の通用範囲になります。ですから、このようにブロックを超えて temp の値を表示しようとするとコンパイルエラーになります。戻しておきましょう。次に、for ループのカウンタ変数についても説明してみましょう。for のカウンタ変数も ANSI-C ではこのようにブロックの先頭で宣言しなければなりませんでしたがC99 では for の直前、もしくは( ) の中に宣言できるようになりました。ですから、この i をここで宣言することが可能です。実行するとこのように 10 回繰り返してアステリスクを書いています。この場合、カウンタ変数 i の通用範囲はfor のブロックの中だけですからブロックから抜けて、このように参照することはできません。 これも元に戻しておきます。次に、グローバル変数ですがグローバル変数は関数のブロックの外で宣言し宣言以降ならどの関数からも参照することができます。グローバル変数をこの main の前に宣言するとmain 関数の中からもそして func1 の中からも使用することができます。実行するとこのように g の値を main の中とfunc1 関数の中、両方で表示しています。但し、グローバル変数は宣言以降でなければ使えないのでこの g の宣言を切り取ってこの func1 の前に貼り付けてしまうとfunc1 の中の g はこのまま使えますがmain の中の g は使えなくなってしまいます。これも元に戻しておきます。なお、もしグローバル変数とローカル変数の名前が同じになった場合にはローカル変数が優先されます。ですから、ここでローカル変数の g を宣言するとここで表示するのはローカル変数の g になります。グローバル変数はどの関数からも参照が可能で関数間で引数として渡す必要がありません。ですから、ある意味とても便利な存在です。けれども、変数の衝突が起こりやすくどこで変数の値が変えられているのか分かりにくいため安全性が低くなります。 ですから、グローバル変数を使うのはこのようにプログラム全体を管理するために使う変数プログラム全体で参照する変数に留め通常の関数間での変数のやりとりは引数を使うようにしましょう。このレッスンでは、変数の使える範囲である通用範囲について説明しました。

C 基本講座

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

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

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

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

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