ITメモ
C言語 / Programming Language C
開発環境 / Development Environment
【Mac】Xcode【Win】Visual Stadio
基礎 / Basic
About C言語書式コメントコンパイルとリンクメイクファイル / Makefileヘッダファイル変数定数型 / Type配列 / Arrayポインタ / Pointer演算子 / Operator制御文 / Control Statement関数指定子 / 修飾子構造体と共用体 / Structure & Unionプリプロセッサ / PreprocessorthisキーワードTypedef
入出力 / Input & Output
入出力入力フォーマット指定子出力フォーマット指定子「printf」関数を使って文字を出力・表示させる方法「printf_s」関数を使って文字を出力・表示させる方法「scanf」関数を使って入力させる方法「scanf_s」関数を使って入力させる方法「getchar」関数を使って「1文字」だけ入力させる方法「gets」関数を使って「文字列」を入力させる方法
文字列 / String
文字列 / String「snprintf」関数で「配列」に文字列を書き込む方法
ネットワーク / Network
memset - メモリブロックのセット
メモリー管理
メモリー
オペレーション / Operation
ファイルを操作をする方法コマンドラインプログラム / Command-Line Programプロセス / Processソケット通信 / Socket Communication
用語集 / Glossary
サブルーチン / Subroutineスタックとキュー / Stack & Cueスレッド / Thread
C言語標準ライブラリ(ヘッダファイル)
C言語標準ライブラリ【assert.h】 - 診断機能【complex.h】 - 複素数計算【ctype.h】 - 文字操作【errno.h】 - エラー【fenv.h】 - 浮動小数点環境【float.h】 - 浮動小数点型の特性【inttypes.h】 - 整数型の書式の変換【iso646.h】 - 代替つづり(Alternate spellings)【limits.h】 - 整数型の大きさ【locale.h】 - 文化圏固有操作【math.h】 - 数学【setjmp.h】 - 非局所分岐【signal.h】 - シグナル操作【stdalign.h】 - アライメント【stdarg.h】 - 可変個数の実引数【stdatomic.h】 - アトミック操作【stdbool.h】 - 論理型および論理値【stddef.h】 - 共通の定義【stdint.h】 - 整数型【stdio.h】 - 入出力【stdlib.h】 - 一般ユーティリティ【stdnoreturn.h】 - _Noreturn【string.h】 - 文字列操作【tgmath.h】 - 型総称数学関数(Type-generic math)【threads.h】 - マルチスレッド【time.h】 - 日付及び時間【uchar.h】 - Unicodeユーティリティ【wchar.h】 - 多バイトおよびワイド文字拡張ユーティリティ【wctype.h】 - ワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ
C言語ライブラリ(ヘッダファイル)
C言語ヘッダファイル【winsock.h】





【C言語】ヘッダファイル / Header File

【C言語】
ヘッダファイル / Header File







「ヘッダファイル」とは


「ヘッダファイル」は、
インクルードされるためのファイルで、
「ヘッダファイル名.h」という名前で作成されたファイルに、
「構造体」「プロトタイプ宣言」を記述したものを、
「ヘッダファイル」という。


通常、ヘッダファイルには、
関数の中身は書かず、
中身はソースファイル (.c) の方に記述する。


ヘッダファイルには、
メモリを確保する内容を記述すると、
多重エラーなどが発生するため、
変数・関数の定義はできない。


実際のソースは、「同名.c」ファイルに記述し、
ソースファイルの「.c」 とヘッダファイルの「.h」 の
両者を対応させるように作り上げていくのが一般的。
ヘッダファイルと同名のソースファイル「.c」で、
「ヘッダファイルを呼び込み」「関数」「変数」などの
定義をすることで、
ヘッダファイルとしての機能が完成する。


Back

「ヘッダファイル」にできること


マクロの定義例、#define MAX_COUNT (10)
クラスの定義例、class CManiac { int m_iValue; }
変数の宣言(定義ではない)例、extern int g_iCounter;
更に他のヘッダをインクルードすること例、#include <string>


  • staticな関数やグローバル変数の宣言はヘッダファイル内には書かない
  • グローバル変数をextern宣言する
  • ヘッダファイル内では他のヘッダファイルのインクルードを最低限に留める
  • ヘッダの中に、メモリを確保するようなコードを書いてはいけない。
  • メモリを確保するコードは *.cpp の中に書く。
  • 変数を共通化するには、変数の extern 宣言をヘッダの中に書く。


Back

「ヘッダファイル」の保存ディレクトリ


  • /usr/include
  • /usr/ucbinclude


Back

「ヘッダファイル」の書式


「ヘッダファイル」は、
「関数」「定数」「構造体」などを
あらかじめ定義して、
機能するプログラム記述しておくことで、
「ヘッダファイル」を読み込み、
「関数名」などを呼び出すだけで、
「ヘッダファイル」内にある「関数」などを
利用することができるようにできます。


「ヘッダファイル」は、
「定数」「構造体」「関数」などを宣言することができます。
ですが、
「関数」の実行内容は、
「ヘッダファイル」の「ヘッダファイル名」と同じ
「ソースファイル(ヘッダファイル名.c)」を作成して、
関数の実行内容を記述します。


「ヘッダファイル」の書式で注意したいのが、

・グローバル変数の定義
・関数定義

を含めてはいけない点。
上記の内容は、「ヘッダファイル名」と
同じ名前の「ソースファイル(ヘッダファイル名.c)」を作成して、
その「ソースファイル」に記述する。



「ヘッダファイル」の構成部品一覧

・多重インクルード防止
・ヘッダファイルインクルード
・マクロ定義
・型定義
・プロトタイプ宣言
・グローバル変数の外部参照宣言


「ヘッダファイル」に記述しない部品

・グローバル変数定義
・関数定義



「ヘッダファイル」の構成部品リスト

部品配置可否役割
多重インクルード防止ヘッダファイルを多重にインクルードされるのを防止
ヘッダファイルインクルード#includeによる外部ファイルのインクルード
マクロ定義#defineによる定数定義
型定義構造体、列挙型、共用体のデータ型定義
プロトタイプ宣言関数のプロトタイプ宣言
グローバル変数外部参照宣言外部ファイルへ公開するグローバル変数の参照宣言
グローバル変数定義×グローバル変数の実体定義
関数定義×関数の実体定義


「ヘッダファイル」の「ソースファイル」に記述する構成部品リスト

部品記入可否役割
多重インクルード防止×ヘッダファイルを多重にインクルードされるのを防止
ヘッダファイルインクルード#includeによる外部ファイルのインクルード
マクロ定義#defineによる定数定義
型定義構造体、列挙型、共用体のデータ型定義
プロトタイプ宣言関数のプロトタイプ宣言
グローバル変数外部参照宣言×外部ファイルへ公開するグローバル変数の参照宣言
グローバル変数定義グローバル変数の実体定義
関数定義関数の実体定義





「ヘッダファイル」のサンプルコード


#ifndef 記号定数
// 「記号定数」で指定した名前が「定数」で定義されていない場合のみ「#endif」までが実行される。

#define 記号定数
// 「記号定数」で指定した名前を「定数」として定義する

//------------------------------------------------
#include <ヘッダファイル名.h>

//------------------------------------------------
// マクロ定義(Macro definition)
//------------------------------------------------
#define 定数名 値

//------------------------------------------------
// 型定義(Type definition)
//------------------------------------------------
typedef struct
{
型 変数名;
型 変数名;
型 変数名;
} 構造体名;

//------------------------------------------------
// プロトタイプ宣言(Prototype declaration)
//------------------------------------------------
型 関数名(引数の型 引数変数);

//------------------------------------------------
#endif

「#ifndef」と「#ifdef」の違い 「#ifdef」は、
「#ifdef 定数名」で指定した「定数」が定義されているときに、
「#endif」まで実行される。

「#ifndef」は、
「#ifndef 定数名」で指定した「定数」に定義されていない時に、
「#endif」まで実行される。


「ヘッダファイル」の「ソースファイル」基本フォーマット


#include <ヘッダファイル名.h>
#include <ヘッダファイル名.h>
#include "ヘッダファイル名.h"

//------------------------------------------------
// 関数の実装 //------------------------------------------------
型 関数名(引数の型 引数変数)
{
printf("%s %d", 変数名, 変数名);
return 0;
}



Back

「ヘッダファイル」を読み込む書式


「ヘッダファイル」を読み込む書式は、

#include <ヘッダファイル名.h>
#include "ヘッダファイル名.h"

の2種類。
読み込む「ヘッダファイル」によって、
2つの読み込む書式を使い分けます。



ヘッダファイル書式
#include <ヘッダファイル名.h> stdio.h のような標準ヘッダをインクルードする。
ヘッダファイルの場所は環境変数INCLUDEで指定したディレクトリ。
コンパイラのデフォルトのインクルードパス及びコンパイルオプションで、 指定したインクルードパスを起点として挿入するファイルを検索。
#include "ヘッダファイル名.h" 自分で用意したヘッダファイルをインクルードする。
普通ユーザが作ったヘッダファイルを指定するとき使う。
ヘッダファイルの場所は、 ソースファイル(拡張子.c)と同じ場所。
カレントディレクトリのパスを起点として挿入するファイルを検索、 ファイルが見つからなかった場合 「#include <挿入するファイルのパス>」 と同様の検索を行う。


Back

「C言語」のライブラリ関数 一覧


(参考)「void * 関数名()」 とは
「void * 関数名()」 は、
返り値のポインタに、
どのような型でも指定できる
「汎用ポインタ型」ということを表している。

関数を指定する場所によって、
ポインタの型が異なるため、
使用するたびにポインタの型を指定しなければならない。

この「void *」で、
「ポインタ型指定して、返り値のポインタを受け取る。」と宣言する。
使用するときの型指定は、
本来の目的の型でキャストしてやるべき。


ヘッダファイル名機能
assert.h 診断機能
complex.h複素数計算 (C99より追加)
ctype.h文字操作
errno.hエラー
fenv.h浮動小数点環境(C99より追加)
float.h浮動小数点型の特性
inttypes.h整数型の書式の変換 (C99より追加)
iso646.h代替つづり(Alternate spellings)(C95より追加)
limits.h整数型の大きさ
locale.h文化圏固有操作
math.h数学
setjmp.h非局所分岐
signal.hシグナル操作
stdarg.h可変個数の実引数
stdbool.h論理型および論理値 (C99より追加)
stddef.h共通の定義
stdint.h整数型 (C99より追加)
stdio.h入出力
stdlib.h一般ユーティリティ
string.h文字列操作
tgmath.h型総称数学関数(Type-generic math) (C99より追加)
time.h日付及び時間
wchar.h多バイトおよびワイド文字拡張ユーティリティ(C95より追加)
wctype.hワイド文字種分類およびワイド文字大文字小文字変換ユーティリティ(C95より追加)
winsock.h Winsockはウィンドウズでソケットを使ってプログラムを書くためのAPI(Application Program Interface) Winsockを使うと、TCP/IPなどインターネットを使って通信を行うプログラムが書けます。
winsock2.h Winsockはウィンドウズでソケットを使ってプログラムを書くためのAPI(Application Program Interface) Winsockを使うと、TCP/IPなどインターネットを使って通信を行うプログラムが書けます。


Back