【問題12】Cプログラムの見通しが良くなる「関数」を習得しよう!:完全マスター! 組み込みC言語プログラミング(13)(2/2 ページ)
C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。いよいよ関数に話題が移ります。関数を有効に利用できるとプログラムの見通しが良くなるので、ぜひ習得してください。
関数呼び出しとプロトタイプ宣言
プログラムで関数を使うことを「関数呼び出し」といいます。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の関数フローチャートを示します。
関数の処理の結果、aに最大公約数が求まるので、31行目のreturn文でaの値を返します。return文の構文規則は次のようになっています。
return 式;
問題13
それでは、次回の宿題です。
問題13:
大きさ12のintの配列に、1月から12月までの小遣いの支出金額が格納されている。その配列を引数とし最も支出の多かった月を返す関数を作ります。
⇒解答と解説は次回
Copyright © ITmedia, Inc. All Rights Reserved.