2015年6月24日水曜日

C言語のお勉強 ヘッダファイルとは?

ヘッダファイルとはなんぞや?

作成するアプリケーションの規模が大きくなるにつれ、コードは複雑になり、保守性も悪化する。
そのため予めサブルーチンを物理的に切り分け、拡張子.hの別のファイルとして(ヘッダファイル)作り、それを呼び出す(インクルードする)ことで保守管理や再利用が容易になる。


その中身はプリプロセッサ指令と、C言語のコードからできていて、インクルードする際に#include<xxxx>部分とそっくり入れ替わる。(C++では異なるらしい?)


ヘッダファイルの作り方

単純なものとしては、元のファイルから関数や変数の定義部分のコードを切り取ってヘッダファイルとして保存しておくだけ。ヘッダファイル自体はコンパイルは不要である。

インクルードすることでその部分が置換されるので、置換後のコード全体で整合性がとれていればOK。
そのためヘッダファイルの内部で関数を利用ていたとしても、その関数に必要なファイルのインクルードは必須ではない。


まだ私にはわからないが、実際の運用ではヘッダは宣言とし、実装部は別に分けるべきらしい。
グローバル変数や関数のプロトタイプ宣言にとどめておくとのこと。
ココらへんはライブラリの仕組みと利用についても勉強しなければいけなさそう。

C言語 (#include)自作ヘッダファイルを使ってみる
ヘッダファイルを作る

ヘッダファイル作成時の注意点

ヘッダファイルは作り方を間違えるとエラーが頻発する。
特に循環参照になってしまうと、デバッグは困難を極める。
インクルードする際は読み込まれる順番(上から)ので、場合によっては考慮する必要があるかもしれない。

ポイントとして

  • 他のヘッダファイルのインクルードを最低限に留める
  • 二重include防止用のインクルードガード
  • 単体でincludeできる
  • グローバル変数をextern宣言する
  • staticな関数やグローバル変数の宣言はできるだけ少なく。


ちなみに自作ヘッダファイルをインクルードするときは、「#include "xxxx.h"」にする。
「< >」で囲むのは、標準ヘッダファイルとのこと。


その7 ヘッダーファイルは慎重に扱わないと危険です
C言語の正しいヘッダファイルの書き方
C初心者が知っておきたいヘッダーファイルとリンクの基礎知識

よく使われていそうな単語


  • struct 構造体を表す。ここでは詳細は省略(構造体タグと構造体変数およびメンバ)
  • typedef xxxx yyyy xxxxをyyyyに置き換える。structと組み合わせてよく使われる。
  • enum 列挙体。詳細は省略。
  • extern 宣言のみを行う。

※#define等は最後に「;」をつける必要は無いが、これらはCのコードなので必要になる。

「宣言」と「定義」は異なる。

  • 宣言 その名前と型が存在することを示す。
  • 定義 実際にその中身を作成する。

といった感じ?

変数は宣言と同時に定義が行われるが、externを頭につけることで宣言のみしか行わない。
宣言は同じ型であれば何度でも行える。
これを利用してファイルを超えて共有されるグローバル変数で使用される。
逆に定義は複数あるとエラーになるため、使用には注意が必要。

分割の定石 
いまさらC言語のexternで悩む
変数にexternをつけるってどういうこと?




コメントの付け方
C, C ++ での書き方



0 件のコメント:

コメントを投稿