13-04.関数、変数、文、式
関数と変数
C言語のバイブルである、
プログラミング言語Cには、8ページに、以下の様な記述があります。
一つのCプログラムは、その大きさはどうであれ、関数と変数からなる。
関数には、行うべき計算の過程を指示する文、
および計算で使われる値を格納する変数が含まれる。
シンプルですが、C言語の構造をこれほど簡潔に述べた文章もそうはないと思います。
ここでは、2つの重要なことの説明があります。
1、C言語は関数と変数で構成される
2、関数には、計算の過程を記す文と、変数がある。
1、は、いわゆる
グローバル領域のことを説明しています(#で始まるプリプロフェッサ命令はC言語の一部ではないので、ここでは説明しません)。
グローバル領域は、あらかじめ定義される(つまり実行前に保持される)
グローバル変数と、
関数がある、といっています。代表的な関数は
main関数です。
2で説明されているのは、
関数の中身です。
関数の中は変数と文があるといっています。
具体的には
関数は
戻り値の型 関数名 { 変数宣言定義 文リスト }
という構造になります。
関数の定義領域をまとめる
{ と
} は必須です。
ここで出てくる
変数は多くの場合
ローカル変数です。
ローカル変数はその関数内で
閉じています。
そして、計算過程が記される
文があることを説明しています。
文(Statement)は複数記述することができそれは
文リスト(StatementList)という形でまとめられます。
C言語のソースは、以上のような構造で記述され、実際の実行は、一般的には
main関数から実行されます。
main関数の実行は
変数の宣言があれば、それらを定義し、
文リストの先頭の
文が実行されます。
文(Statement)
文は、例えば
のように
; (セミコロン)で区切られています。改行は無視されます。すなわち
が
文であり、セミコロンで区切られた後は、次の
文が始まります。
式(Expression)
文は、計算そのものを記す
式で構成されます。
ここで
式というと
のような算術計算を思いうかべるかもしれません。
算術計算ももちろん
式なのですが、
プロラミング言語における
式はもっと広い意味を持ちます。
例えば、C言語では
と書けば
10進数の整数50をあらわす定数ですが、これは、ソースコード上は
アスキーコードの
5と
0が並んだものにすぎません。これを
50という数値に変換しなければなりません。この変換処理も
計算ですから
式とみなされます。
50のような定数の記述を
といいます。同じように
0x2Bのような記述は
となり、両社とも
式なのです。
式と計算結果
式は
計算ですので
結果を戻します。これを
返すと表現する場合もあります。計算結果は
値という形で返されます。
そしてその
値は、別の式の
オペランドとして再利用されます。
以下の
文を考えてみましょう。
int i;
i = (3 + 5) * (7 - 9);
2つの文が並んだものです。
まず、
ですが、これは
変数iの定義でありこれも
式として実行します。
1、iという識別子が登録される
2、その識別子対応する変数定義式が実行され、メモリが確保される
という処理を行い、
i を確保します。
続いて整数リテラルが並んだ計算文です。
この処理は以下の様な順番で行われます。
1、3という整数リテラル式が処理されて、3という値になる
2、5という整数リテラル式が処理されて、5という値になる
3、1と2の値に加算式が実行されて、8という値を得る
4、7という整数リテラル式が処理されて、7という値になる
5、9という整数リテラル式が処理されて、9という値になる
6、4と5の値に減算式が実行されて、-2という値になる
7、3の値と6の値に対して乗算式が実行されて、-16という値を得る
8、7の値が、変数iに代入され、代入した値-16という値を得る
8で行った
代入式の実行は、C言語では
代入された値そのものが返りますが、上記の例ではをれは利用してません。
変数iに代入のみ処理しています。
このような処理の後は
と書けば、
変数式iを実行することになり、それは現在保持している
-16という値を得ることができるようになり、例えば
などで、利用できるようになります。
つまり
変数式を実行すると、
その変数の内容が戻り値になるということです。
別にC言語でなくても
int i;
i = (3 + 5) * (7 - 9);
がどういう計算なのか、すぐに理解する人も多いと思いますが、それを、インタプリタなりコンパイルなり、その言語を作成するということは、上記したような細かいところまで考える必要が出てきます。
というより、そういう細かいところを実装していくことが
言語を作成するということにほかなりません。
次項では、
13-03.ファイル構成の設定と、関数定義で実装した内容について細かく分析します。
まずは、この項で説明した
変数はまだ出てきませんが、いずれ登場する
変数の概念も加味しながら、実装を進めていくことになります。