第8章 C言語の関数 ~ 関数の作り方とモジュール分け ~

 以前、「関数を自分で作ることができる」というくだりがあったのを、覚えている人はいますか?

 実は printf( ) や strcpy( ) などの関数も、どこぞの誰かによってC言語で作られた関数(注20)なのです。 しかし、今更皆さんが printf( ) や strcpy( )のような関数を作ってもしょうがないですね。既に用意されてるものがあるのですから。では、何故関数を作ることを習わなければいけないのでしょう。

 次頁の記述を打ち込んでみて下さい(ちょっと、わざとらしいプログラムですが、勘弁してください)。

— リスト21–

#include <stdio.h>

void main() {
  int tanka;
  int num;

  tanka = 2000;
  num = 4;

  printf("合計は、%dです。\n", tanka * num);

  tanka = 1500;
  num = 5;

  printf("合計は、%dです。\n", tanka * num);

  tanka = 3000;
  num = 2;

  printf("合計は、%dです。\n", tanka * num);
}

 とても簡単なプログラムでしたね。

 では、このプログラムを、関数を用いたプログラムに書き直してみましょう。 関数の記述方法は、以下のようになっていて、本来はmain 関数と何ら変わりありません。

  戻り値の型 関数名( 引数の型 引数名, 引数の型 引数名 ) { 

    いろいろと処理を記述する 

  }

 もちろん、引数が必要でなければ、今まで出てきた main 関数のように、 ( ) とだけしても構いません。 それでは、リスト21を次のように変更してみてください。

— リスト21`–

#include <stdio.h>

void main() {
  int tanka;
  int num;

  tanka = 2000;
  num = 4;

  goukeiPrint(tanka, num);   (1)

  tanka = 1500;
  num = 5;

  goukeiPrint(tanka, num);

  tanka = 3000;
  num = 2;

  goukeiPrint(tanka, num);
}

/**
 * 単価と個数から、合計を計算して表示する関数   (2)
 */
void goukeiPrint(int tanka, int num) {
  printf("合計は、%dです。\n", tanka * num);
}

 (2)の部分が、関数 goukeiPrint を作る記述です。

 しかし、このプログラムをコンパイルしようとしたら、 コンパイラから何か注意されませんでしたか? goukeiPrint なんて関数は知らないと言われたかもしれません。

 Cコンパイラは、あなたのファイルを前から順番に読み込んで、翻訳していきます。 (1)の部分で、関数 goukeiPrint を printf や strcpy と同じにように呼んでいますね。 しかし、Cコンパイラはこの時点では、goukeiPrint などという関数があることを知りません。 関数 goukeiPrint の実体は、(2)の部分にあるからです。

 このコンパイルエラーは、以下の二つの方法で回避することができます。

  1)(2)の部分を main 関数よりも前に記述する。
  2)関数の宣言を行う。

 1)でも今の部分は問題ありませんが、より高度なプログラムを作れるように、 ここでは2)の方法を使いましょう。

 リスト21を次のように変更してください。

< 前のページへ

Pagetop