ものづくりBLOG blog page

第10章 インクルードファイル

2011-01-01 (Sat) 10:00
H8+C言語入門:第10章 インクルードファイル
 
 第10章では、インクルードファイルの話しをしましょう。
 よくプログラムの先頭に
  #include <stdio.h>
 とか、ものづくりの大会でよく使うのは、
  #include "3048f.h"
 などの表記があります。
 
 配置としては、最初の行によく書かれています。
 これをインクルード(ファイル)といいます。
 コンパイル作業は、大まかに見ると「プリプロセッサ」と「コンパイラ」という処理で行
 われています。「プリプロセッサ」は、この「#include」という文字を見つけると、指定
 されたファイル(つまりここでは、stdio.h とか、3048.h というファイル)をこの位置に
 読んで追加(挿入)します。
 
 インクルードファイルは、
  ・コンパイラをインストールした時に、どこかに作られた(はず)、
  ・自分で作成した、
 ものに分けられます。
 コンパイラをインストールされた時に、どこかに作られたものは、マニュアルやヘルプを
 探してみてください。ここに格納されていますよというフォルダーが紹介されていると思
 います。
 自分で作成したインクルードファイルは、コンパイラや開発環境(ここでは、HEW)が指定
 するフォルダーに保存するか、自分で保存した先のフォルダーを指定することができる様
 になっています。
 
 インクルードファイルは、別名、ヘッダファイルとも呼ばれます。
 拡張子が .h となっていますし、こちらの名前がしっくりくるかもしれませんね。
 この行の先頭に #include というのがついているので、そこからインクルードファイルと
 呼ばれているのですが、いずれでもよいです。自分の呼びやすい名称で覚えましょう。
 但し、他の人が自分とは違う呼び名を使っても混乱しないように注意しましょうね。
 ここでは、以下、ヘッダファイルとします。
 
 通常、記号<>で囲まれたファイルは、コンパイラや開発環境が標準に用意しているヘッ
 ダファイルのフォルダーにあることを示しております。他方、記号""で囲まれたファイル
 は、自分で保存先を指定したフォルダーにある(はず)ことを示します。
 ファイルが存在しないと、コンパイル処理の際、エラーとなって表示されます。
 
 H8のプログラミングでよく使うヘッダファイルに 3048f.h があります。
 目的は、H8の入出力ポートをプログラムからアクセスするために、実際は、指定された
 アドレスを指定する必要があるが、それでは何が何だか分からないので、分かりやすい記
 号化した名前を使い、#define を使って実際のアドレスを定義しておくというやり方をし
 ます。その #define を集めたものが 3048f.h であると理解してもいいと思います。
 さまざまな関数などの宣言や定義(変数、記号文字定数など)がされているファイルという
 ことですね。
 3048f.h の内容は、テキストエディタ(メモ帳など)で開くことができますから、興味があ
 りましたら、自分で内容を見てみてください。あー!なるほど!ってことになりますよ。
 
 3048f.h が、各入出力アドレスを入出力の名前にまとめたものです。
 このファイルをインクルードすることにより、前述のような宣言をいちいち書く必要はあ
 りません。各入出力名は、3048f.h をご覧いただくとして、C言語のソースコードでの書
 き方の例を次に示します。
 
#include "3048f.h" //3048f.hをインクルードする。
 
void main(void){
P1.DDR = 0xff; //ポート1のコマンドアドレスに0xffをセットし、出力に初期設定する。
P1.DR.BYTE = i; //ポート1にiの内容を出力する(バイトアクセス例)。
P1.DR.BIT.B1 = 1; //ポート1のビット1を1にする(ビットアクセス例)。
}
 
 これは、プログラミングをする際、毎回同じ様なことを書く−各ソースファイル毎に同じ
 定義や宣言をしたい時の為に、(いわば)楽をするために作られた仕組みであるということ
 ができますね。毎回必ず同じことを書かなければならないことがあるのならば、それを1
 つのファイルにまとめて、使う時に #include で始まる1行を書くだけで、お終いとなる
 ようにしようと いうことですね。ヘッダファイルの中身を見てみると、その理由が分かり
 ますよ。こんな面倒なものを毎回書くのはやはり面倒だし−というようにね。
 でも、コピペでもいいんじゃない、という方もいらっしゃると思いますが、同じ内容だけ
 ど、各ソースファイルに書き込んで、そのソースファイルの数が2、3個程度であれば、
 その部分の修正も何とか全てを同じに保つことができるでしょうが、もっと数が多くなる
 と、その管理も面倒になり、修正漏れが出てきたりすると、それが原因でバグとなったり、
 或いは、動作不良となったり、或いはコンパイルできない、などのような困ったことが出
 てきます。そんなことを回避する先人の知恵(=C言語の仕様)なんでしょうね。
 
 
−まとめ−
 1.#includeは、指定されたファイルをその位置に読み込みます。

ものづくりBLOG

Blog Category

Blog Calendar

RSS 2.0