9.関数を作ろう
今まではmain()だけの説明をしてきましたが、今回は関数を分ける事の説明
をしましょう。
まずは、下記の6行をkansu1.cというファイル名で打ち込んで下さい。
#include "kansu.h"
void main(void)
{
char work[] = "main de set !";
kansu2(work);
}
更に、下記の5行をkansu2.cというファイル名で打ち込んで下さい。
#include <stdio.h>
#include "kansu.h"
void kansu2(char *work)
{
printf("data = [%s] \n", work);
}
最後に、下記の2行をkansu.hというファイル名で打ち込んで下さい。
void main(void);
void kansu2(char *);
そしてコンパイルするのですが、今まではソースがひとつだけだったのですが、
ファイルがふたつ以上に分かれた時にはリンク時にふたつのファイルを指定していな
ければなりません。
具体的にどうするかと言うと、ソースファイルを続けて記述してあればOKです。
コンパイルは通りましたか? 正しく実行されましたか?
画面上に「data = [main de set !]」と表示されて改行されていれば正常です。
今回の学習項目
1)#include "kansu.h"
includeは前述の通り別ファイルを取り込むと言う事で、ここでは
kansu.hを取り込みます。
ここでkansu.hの前後に"が付いています、これはシステムで用意してある
ヘッダーファイルでなく自分で作成した物である事を表します。
こういう物だと思って下さい。
2)char work[] = "main de set !";
workと言う文字列を定義して、その内容に「main de set !」をセットして
います。通常では文字列を定義する時は長さを指定しますが、初期値を指定
している時は、その文字列の長さで定義されてしまいます。
3)kansu2(work);
受け渡しのエリアとしてworkを指定して、kansu2と言う関数を呼び出します。
4)kansu2(char *work)
呼び出される側の定義をしています。
内容は、文字列のポインタを受け渡しのエリアとしてkansu2を呼ばれるので
その値をworkにセットします。
5)kansu.h
void main(void);
void kansu2(char *);
これは、プロトタイプ宣言と言って、同一ファイルに無い関数を使用する時に
コンパイラが間違わない様にしていします。(使う側のミスも減る)
上記の例だと、戻り値の無い(void)関数定義で、ひとつは受け渡しエリアを
持たない(void)mainと、もうひとつは文字列のポインタを受け渡すkansu2
と言う関数を定義しています。