SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

たった5つのルールではじめるC言語開発

便利な記述法


ヘッダーファイルと#include

 C言語のプログラムは、これまで例題ではxxxx.cというファイルに記述しました。これが本格的なプログラムになると、.cファイルだけでなく.hという拡張子のファイルとペアの構成でプログラムを作ります。このとき、.hのファイルを「ヘッダーファイル」といいます。

 .cファイルにはプログラム本体を記述します。では.hには何を記述するのでしょうか。それは、.cの中に記述された関数や#defineによる別名定義のうち、他の.cファイルからも使いたいものを.hに記述して公開します。

 たとえばリスト1の例に出てきたLed_D7()という関数がmain.cでなく別のled.cというファイルの中にあるとします、これをmain.cファイルの中の関数から呼びたいとき、なにが必要でしょうか。それはLed_D7()関数のプロトタイプと、引数に与えるパラメータの情報です。そこでこれらをヘッダーファイルに記述して、呼ぶ側と呼ばれる側で情報を共有させます。

 つまり、led.hの中には以下のように書いておき、

led.h
void  Led_D7( int onoff );

#define TENTOU  1
#define SHOUTOU 0

 led.cには、以下のように書きます。

led.c
void Led_D7( int onoff )
{
    if  ( onoff == TENTOU ){
        P12.3 = 1;
    }
    else{
        P12.3 = 0;
    }

    return;
}

 そして、このヘッダファイルの情報を持ちたいとき、#include(インクルード)という文をつかって、そのヘッダファイルを指定します。

ヘッダファイルを指定
#include "led.h"

void main()
{
    Led_D7( TENTOU );
}

 当のled.cもled.hの情報は必要ですから、以下のように記述します。

led.hの情報
#include "led.h"

void Led_D7( int onoff )
{
    if  ( onoff == LED_ON ){
        P12.3 = 1;
    }
    else{
        P12.3 = 0;
    }

    return;
}

 もちろんヘッダーファイルの情報をそれぞれ.cの中に書いても文法上は間違いではありません。しかし、同じ内容を複数箇所に記述すると、間違えたり変更時に変更もれをしたりします。そこで、このヘッダーファイルと#includeのしくみを利用して、記述を1カ所にしてそれを共有するという方法を使います。

 スプーン音待ちのテストプログラムであるmain.cの上の方を探してみると、こんな記述が見つかります。

main.cの記述
*************************************
**  Include files
*************************************
*/
#include "macrodriver.h"
#include "system.h"
#include "port.h"
#include "watchdogtimer.h"

 それぞれ見覚えのある名前ではないでしょうか。そう、macrodriver以外は、Appliletで設定した機能の名前です。設定した内容はそれぞれ設定動作をするプログラム*.cが自動生成され、それらの情報を使えるように.hファイルで公開しているわけです。main.cではそれら設定情報を#includeで共有しているゆえに、いきなりなんの宣言もなくポート名(P12.3とか)が使えたりしているということなのです。

 どうでしょう、ちょっとわかったようでわからない? かもしれません。次回以降で、マジカルボックスの実際のプログラムを見ながら解説をします。そこで実例というか実際の使われ方を見ていただくのが一番わかりやすいと思います。

 長い間お疲れさまでした。以上でマジカルボックスで使用しているC言語の文法はすべてです。次回からはこれまで学んだ知識をもとに、実際のプログラムを読み解いていきます。例題でしか見てこなかった各種命令も、実際にはこんなふうに使うんだというのを見ることで、より理解を深めることができます。文法の教科書を読むよりも、たくさん小説などを読むほうが実力がつくのと同様です。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

NECマイクロシステム株式会社 勤務NPO法人SESSAME 所属開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3731 2009/03/26 17:09

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー