プログラミング演習
I2003
年
6月
4日(第
8回)
木村巌
知識編:関数の定義
関数の定義の仕方
引数の型、返り値の型
知識編:関数の定義
引数として幾つかの値を渡し、一定の処理をし て、値を返す
……関数
関数の名前として使えるのは、変数名などと
同じ.アルファベット、数字など
関数の定義(続き)
返り値の型 関数名
(型
1仮引数
1,型
2仮引 数
2,…,型
n仮引数
n) {関数本体
}という形に なる.たとえば
int main (void) {}
int main (int ac, char *av[]) {}
も関数の定義の例.前者は、引数を取らず、
int
型を返す.後者は、
int型の引数
acと、
char型のポインタの配列
avを引数として取り、
intを返す
関数の定義(続き
2)
関数定義には、それ以外の形式もある
上に述べたものは、「プロトタイプ形式の関数 宣言」と呼ばれるもの
もう一つの、「従来形式の関数宣言」は、主に
後方互換性のためなので、この講義では触
れない
関数の返す値
関数の返す値としては、「
Tの配列」、「
Tを返 す関数」の二つ以外は任意のものが取れる
関数の末尾の
return文が返す値と、関数の返 す値の型とが一致していなければならない
(一致していない場合、関数の返す型の方に
合わせられる)
関数が定義できる場所
翻訳単位の最上部
簡単に言うと、他の関数内では関数を定義で
きない(
main()の内部でもできない)
関数の呼び出し
関数呼び出しは、
関数名
(式
1,式
2,…,式
n)の形.
引数の式の評価される順序は規定されてい ない(多くの場合、式
nから始まって、左向きに 評価されるが).
関数呼び出しがプロトタイプの支配を受ける
場合、それに従って対応する仮引数に変換
関数の呼び出し(続き)
引数の評価と変換の後、呼び出された関数 の仮引数に、それらの引数をコピーする
関数の内部で変更されるのは、このコピーで ある!(重要)
ただし、配列の場合は別.配列を関数に渡す
と、配列の最初の要素へのポインタに変換さ
れるから
関数プロトタイプ書く利点
コンパイラに対し
関数名
引数の型、引数の個数
返り値の型
を知らせる.
関数の呼び出しの際に、引数の型や個数の
不一致や、返り値の型の不一致をコンパイラ
が知らせてくれる
関数プロトタイプ
関数の返り値型、仮引数の数と型とを宣言す る.
関数本体を定義しても良いし、定義せず、宣 言だけでも良い
/*
関数本体の定義あり
*/double square (double x) {return x*x;}
/*
宣言のみで、定義は無し
*/double cube (double x);
まとめ
関数の定義、プロトタイプ宣言、関数の呼び
出し
.レポート課題
別紙資料「関数の練習」の問から問をすべて 解け.いずれも、プログラムリスト、コンパイル と実行の仕方、結果を明記すること
締め切り:
2003年
6月
3日一杯(日本時間で)