はじめに
このページでは関数について説明します。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
※以下の情報は2007年11月現在のものです。ご注意ください。
※このページではC言語の用語が沢山出てきますが、ビギナーの方は各自C言語の初級本なども参照しながら読み進めてください。
関数
Cのプログラムは関数という単位で作成され、プログラムには少なくとも1つ以上の関数がなければなりません。関数はある決まった処理をするプログラムのまとまりという感じのものです。
関数は次の構文で書かれます。
戻り値の型 関数名 (引数リスト)
{
}
{ }の中に処理が書かれます。関数を実行する場合にはその関数名と引数リストを指定します。関数が実行されたら、その関数は戻り値を返します。
たとえば、引数が2つあり、その引数同士を足して返す関数は次のようになります。
int myAdd(int a, int b)
{
int c;
c = a + b;
return c;
}
この関数はmyAddという名前で作られています。{ }内で計算して、最後のreturn で戻り値を指定します。この関数を別な関数内で実行するにはたとえば
int d;
d = myAdd(1,2);
のように使います。この場合、まず、myAdd(1,2)で引数1と2がmyAdd関数に渡されます。 myAddでは引数を受けた順番にaに1を、bに2を代入します。その後、myAddが実行され結果の3がreturn(リターン)されます。すると、呼び出し元にもどって、結果がdに代入されます。
void
関数には戻り値が無いものや、引数が無いもの、両方無いものもあります。この場合には型のところをvoidと指定します。
たとえば、LEDを光らせたい関数を作るとします。LEDの点灯は前におこなったように計算などではなく、特殊レジスタを操作するだけなので、戻り値も引数もvoidになります。前ページまでの例では起動時にLEDを3回点滅していますが、その処理をbrinkという名前で関数化しました。
main関数
すでに何度も登場していますが、関数名にmainとつけると、マイコンが一番初めに実行する関数になります。C30の場合、main関数はint型の戻り値を返します。われわれにはその戻り値は関係ありませんが、main関数を書く場合は戻り値をintにして下さい。
他のCコンパイラでは void main (void) という形が多いのですが、C30の場合は戻り値をint以外にすると下のようにワーニングが出ます。青字の部分です。(なるべく出さないように)
変数のスコープ
C言語では変数名は予約語(ifやforなど)以外はどのような名前をつけてもよいことになっていますが、プログラムが長くなると変数名がダブったりして予期しない動きになる可能性があります。C言語では変数宣言はその宣言を行った関数内だけで有効というきまりがあります。これを変数のスコープと言います。例えば、
void brink(void)
{
int a;
brinkの処理...
}
int main(void)
}
int a;
mainの処理...
}
このように、brinkとmainの2つの関数を書いたとします。それぞれで同じ型のaという変数を宣言していますが、これはそれぞれの関数の中だけで有効となります。
逆に、関数間で同じ変数の内容を操作したい場合もあります。この場合には変数は関数の外で宣言します。このような変数をグローバル変数と呼びます。例えば
int a;
void brink(void)
{
brinkの処理...
}
int main(void)
}
mainの処理...
}
と書くと、変数aはどちらの関数でも操作(値を代入したり、値を読み取ったり)することができます。
今回は、実際の実験の様子は説明しませんが、各自、myAdd関数を作ってみてたしかめて下さい。
おわりに
次はC言語のその他について説明します。
2007年11月30日
|