第2章 Cのソースは関数の塊 (2)
2006年7月26日
前章ではプロトタイプ宣言なる文法を利用してみたわけだが、本章ではそれを更に推し進め(?)ヘッダーファイルに吐き出してみることにする。
//"header.h"
//List000-006
//関数のプロトタイプ宣言
int F( int); |
//"main.cpp"
//List.000-006
//f(x)=ax+bをプログラミング
#include "header.h" //製作したヘッダをインクルードする
int main( void)
{
int answer= 0;
answer= F( 3);
return 0;
}
//関数本体
int F( int x)
{
return 7* x+ 5;
} |
| ソースのダウンロード |
"#include"とは、前章で台本のト書きに例えたプリプロセッサ命令と云うものだ。
これを元にコンパイラが"header.h"を読み込むわけだが、私はファイルをマクロ展開しているようなイメージでこれを使っている。
インクルードの対象となるファイルは、どんな拡張子でも良い。
"*.cpp"のようなソースファイルでも、そのまま置き換えてくれる。
ルートも書き込めるものだから、昔は結構無茶苦茶なソースを書いたものである。
いまでもあんまり良く理解していないところを感じるわけで、誰か良いヘッダファイルの書き方をレクチャーしてくれないものだろうか。
それはともかく、ヘッダーファイルの次はこんなことにチャレンジしてみる。
//"header.h"
//List.000-007
//関数のプロトタイプ宣言
int F( int); |
//"main.cpp"
//List000-007
//f(x)=ax+bをプログラミング
#include "header.h"
int main( void)
{
int answer= 0;
answer= F( 3);
return 0;
} |
//"function.cpp"
//List.000-007
//関数本体
int F( int x)
{
return 7* x+ 5;
} |
| ソースのダウンロード |
別ファイルに書いた関数がそのまま呼出されている為、最初は何か不思議な感じがするものの、同じプロジェクトに上の3つのファイルを放り込むと、ちゃんと実行ファイルがビルドされる。
なぜかといえばリンカが引っ付けてくれるからなのだが、あくまでインクルードはコンパイラの仕事で、"main.cpp"とfunction.cpp"はリンカがつなげるんだとイメージすると判り易いのではないだろうか。
ちなみに、私はmakeを書いたことが無い。
便利なツールを手に入れてしまった、アマグラマーの特権(?)だと思っている。
最後に、ずっと気になっていた計算結果を表示してみた。 /*
Title :List.000-008
Filename:"header.h"
*/
//関数のプロトタイプ宣言-------------------------------------
int F( int); |
/*
Title :List.000-008
Filename:"main.cpp"
*/
//インクルードファイル---------------------------------------
#include <stdio.h> //標準入出力関連の関数を使うときに必要
#include "header.h"
//エントリーポイント-----------------------------------------
int main( void)
{
int answer= 0;
answer= F( 3);
printf( "Answer= %d\n", answer); //標準出力に出力する関数
return 0;
} |
/*
Title :List.000-008
Filename:"function.cpp"
*/
//F(x)=7x+5----------------------------------------------
int F( int x)
{
return 7* x+ 5;
} |
| ソースのダウンロード |
ソースの作成からビルドまでの流れを適当に捉えたところで、大分自信がついてきた。
折角の機会なので、次回はいろいろと疑問に感じていたことを実験してみようと思う。
|