libro
www.tuyano.com
Objective-C初心者のためのC言語超入門

プログラムの構造化 〜関数と構造体〜 (2/4)

作成:2011-02-05 21:21
更新:2011-02-05 21:21

■引数と返値

先の例では、単純に関数を呼び出すだけでした。が、関数には「引数」や「返」といったものがあります。特に、計算などを行う関数の場合、必要な値や、その結果を呼び出し元に返して処理すことがよくあります。

簡単なサンプルとして、引数で渡した値までの合計を計算する関数を用意してみましょう。ここでは、引数も返値もない「print100Total」、引数はあるが返値がない「printTotal」、そして引数も返値もある「getTotal」の3つの関数を用意してみました。

print100Totalは、ただ呼び出すだけで計算から出力まで全部やってくれます。非常に単純ですね。ただし「100までの合計を出力する」だけですから、汎用性はありません。何度も必要となることなどないでしょう。

printTotalは、引数で渡した値までの合計を計算します。返値はvoidですから、ただ呼び出すだけです。後は黙っていても計算して出力するまで行なってくれます。出力の内容までは変更できませんが、いろんな数の合計を計算できます。

getTotalは、計算し、結果を返しますので、受け取った値を利用して出力をします。受け取った値を自分で出力しなければいけませんが、逆に言えば「自由な形で結果を利用出来る」ということでもあります。

これらを比べてみると、引数や返値を用意することにより、使うのが多少面倒くさくはなるけれど、より汎用的な使い方ができるようになることがわかるでしょう。あまり細々としたことまで引数で渡すようになると逆に使いにくくなりあまり便利ではなくなってしまいますが、まったくないと全く汎用性がなくなり、やっぱり使えません。

「どのぐらいの引数と返値を用意するのが最適か」ということを考えて、関数は定義するのがポイント、といえるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#include <stdio.h>

// 引数も返値もない
void print100Total(){
	int total = 0;
	for (int i = 1; i <= 100; i++) {
		total += i;
	}
	printf("total: %i\n",total);
}

// 引数はあるが返値がない
void printTotal(int n){
	int total = 0;
	for (int i = 1; i <= n; i++) {
		total += i;
	}
	printf("total: %i\n",total);
}

// 引数も返値もある
int getTotal(int n){
	int total = 0;
	for (int i = 1; i <= n; i++) {
		total += i;
	}
	return total;
}

int main (int argc, const char * argv[]) {
	print100Total();
	printTotal(100);
	printf("Total = %i!!\n",getTotal(100));
	return 0;
}

※関連コンテンツ

「Objective-C初心者のためのC言語超入門」に戻る