つぎのような自分の名前を表示するプログラムを作成して実行する。
#include <stdio.h> main() { printf("Manome Yoichi\n"); } |
つぎのように名前を姓(family name)と名(given name)に分けて、実行してみる。
#include <stdio.h> main() { printf("Manome"); // 姓 printf(" "); // スペース printf("Yoichi"); // 名 printf("\n"); // 改行 } |
つぎのように姓(Family Name)と名(Given Name)を関数にして、実行してみる。
#include <stdio.h> FamilyName() { printf("Manome"); } GivenName() { printf("Yoichi"); } main() { FamilyName(); // 姓 printf(" "); // スペース GivenName(); // 名 printf("\n"); // 改行 } |
つぎのようにFamilyName関数とGivenName関数をmainの下に置いて、実行してみる。
#include <stdio.h> main() { FamilyName(); printf(" "); GivenName(); printf("\n"); } FamilyName() { printf("Manome"); } GivenName() { printf("Yoichi"); } |
処理系によっては、mainの中でFamilyName関数やGivenName関数と対応がとれないことがある。そのような場合はつぎのようにプロトタイプ(ひな型)を宣言しておく。(「Cの絵本」の96ページを参照)
#include <stdio.h> void FamilyName(); // プロトタイプ宣言 void GivenName(); // プロトタイプ宣言 main() { FamilyName(); printf(" "); GivenName(); printf("\n"); } void FamilyName() // プロトタイプ宣言した関数本体 { printf("Manome"); } void GivenName() // プロトタイプ宣言した関数本体 { printf("Yoichi"); } |
上記のプログラムをUNIX(Linux)系の処理に合わせて正しく書くと次のようにな るが、ある程度簡略化してよい。
#include <stdio.h> void FamilyName(void); void GivenName(void); int main(void) { FamilyName(); printf(" "); GivenName(); printf("\n"); return(0); } void FamilyName(void) { printf("Manome"); } void GivenName(void) { printf("Yoichi"); } |
このソースファイルをmain関数とFamilyName関数とGivenName関数の3つに分割する。
(「Cの絵本」の148ページを参照)
最初に、main関数の部分をWriteName.cという名前で独立したソースファイルにする。
#include <stdio.h> int main(void) { FamilyName(); printf(" "); GivenName(); printf("\n"); return(0); } |
つぎに、FamilyName関数の部分をFamilyName.cという名前で独立したソースファイルにする。
void FamilyName(void); void FamilyName() { printf("Manome"); } |
最後に、GivenName 関数の部分をGivenName.cという名前で独立したソースファイルにする。
void GivenName(void); void GivenName() { printf("Yoichi"); } |
三つのソースファイルに分割されていることを確認する。
$ ls FamilyName.c GivenName.c WriteName.c |
この三つのソースファイルをコンパイル・リンクして実行ファイルwritenameを 作る。(「Cの絵本」の148ページを参照)
$ gcc -o writename FamilyName.c GivenName.c WriteName.c または $ gcc FamilyName.c GivenName.c WriteName.c -o writename |
実行ファイルwritenameを実際に実行してみる。
$ ./writename Manome Yoichi |
上記のコンパイル・リンクする方法は、もし三つのファイルのうち一つにエラー
があったばいには、そのファイルを修正して、再び全てのファイルをコンパイル・
リンクすることになるので、エラーのない二つのファイルを無駄にコンパイルす
ることになる。
この様な無駄を省くために、通常は次のように分割コンパイルをおこなう。
$ gcc -c WriteName.c $ gcc -c FamilyName.c $ gcc -c GivenName.c |
コンパイルにエラーがなければ、次のようなオブジェクトファイルが出来ている。
$ ls FamilyName.o GivenName.o WriteName.o |
この三つのオブジェクトファイルをリンクして実行ファイルwritename2を作る。 (「Cの絵本」の148ページを参照)
$ gcc -o writename2 FamilyName.o GivenName.o WriteName.o または $ gcc FamilyName.o GivenName.o WriteName.o -o writename2 |
実行ファイルwritename2を実際に実行してみる。
$ ./writename2 Manome Yoichi |