連載
» 2014年11月18日 11時00分 公開

【問題12】Cプログラムの見通しが良くなる「関数」を習得しよう!完全マスター! 組み込みC言語プログラミング(13)(2/2 ページ)

[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
前のページへ 1|2       

関数呼び出しとプロトタイプ宣言

 プログラムで関数を使うことを「関数呼び出し」といいます。C言語の文法では、識別子(ここでは関数名のこと)の後ろにカッコ(())を付けることで、関数呼び出しと解釈します。

 カッコの中には、式や値をカンマ(,)で区切って並べます。それらを引数(argument)と呼び、C言語ではその値が関数に渡されます。

 実は、Cプログラムでなじみの深いprintfやscanfなども、後ろにカッコが付いているので関数です。printfやscanfのように、C言語では多くの機能を関数にまかせるので、言語そのものはコンパクトになりました。ちなみにifやwhileの後ろにもカッコが付きますが、これらは関数ではありません。ifやwhileはキーワード(keyword)で識別子とは言わないからです。C言語でifやwhileは文(statement)となります。

 さて、現在のC言語では、関数のプロトタイプ宣言といって、関数を呼び出す前にその関数の形式をCコンパイラに教える必要があります。gcd.cでは3行目の

int gcd(int, int);

 がそれにあたり、これにより、自作の関数gcdの引数は2つのint値で、int値を返すことをCコンパイラに知らせます。Cコンパイラはgcdが呼び出されるとき、引数の型や個数をチェックして、誤りがあればコンパイルエラーを出します。

 関数のプロトタイプ宣言では、gcd.cのように引数に型を指定しますが、ここで変数の宣言のように識別子を付けることもできます。そうすることでプログラムの文書性が高まるため、識別子を付けることが推奨されたりします。

 printfやscanfなどの定義済みの関数では、

#include <stdio.h>

 などと、用意されたヘッダファイルをインクルードすることで、コンパイラに関数の形式を知らせます。

関数定義

 関数の機能である一連の処理は、関数定義により記述します。関数定義の構文規則は次のようになっています。

戻り値の型 関数名 ( 仮引数の宣言… )
{
    宣言…
    文…
}

 戻り型の型には、関数が返す値の型を記述します。

 仮引数の宣言では、引数を受け取る変数を宣言します。仮引数に渡されるのは値です。関数を呼び出すときに引数に変数を指定しても、関数から値を変更することはできません。

 それでは、最大公約数を求める関数gcdを書いてみましょう。

 gcd.cの17行目

int gcd(int a, int b)

 から関数定義が始まります。関数が呼び出されるとき、aとbに整数値を受け取ります。戻す値はintです。

 最大公約数の求め方はインターネットを検索すれば簡単に見つかります。詳しいことはそちらに任せるとして、ここではgcd.cの関数フローチャートを示します。

photo gcd.cの関数フローチャート

 関数の処理の結果、aに最大公約数が求まるので、31行目のreturn文でaの値を返します。return文の構文規則は次のようになっています。

return 式;

問題13

 それでは、次回の宿題です。

問題13:

大きさ12のintの配列に、1月から12月までの小遣いの支出金額が格納されている。その配列を引数とし最も支出の多かった月を返す関数を作ります。

⇒解答と解説は次回



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.