ライブラリ

ライブラリ

ライブラリはプログラマがよく使う機能をひとまとめにしたものです。
C言語にはライブラリを使う仕組みが施されており、他人が書いたコードをもう一度書くということを防いでいます。 (「車輪の再発明」の防止)

プロトタイプ宣言とヘッダファイル

第一章では前に書かれた関数を呼び出せるとしていました。 しかし、ライブラリの関数はソースコードに書かれていないため、何もせずには呼び出すことができません。 そこで、関数の実体の代わりにプロトタイプ宣言というものが書かれたファイル (ヘッダファイル) を読み込んでソースコード内に展開することで解決します。

プロトタイプ宣言では、関数宣言の頭の部分のみを書いて、最後に';'で終端させます。

// プロトタイプ宣言のみを行う
int callee(void);

int caller(void)
{
	return callee(); // 問題なく呼び出せる
}

プロトタイプ宣言では、引数がない場合には必ずvoidを書いてください。 これは、かつてはvoidがなければ引数には何を渡しても良いという間違いを誘発する定義になっていたためです。

ヘッダファイルの内容をソースコード内に展開するには#includeを使います。 なお、ヘッダファイルの拡張子は慣習的に.hとなっています。

// callee.h
int callee(void);
// caller.c
#include "callee.h"

int caller(void)
{
	return callee(); // 問題なく呼び出せる
}
これは次のように展開されます。
int callee(void);

int caller(void)
{
	return callee();
}

ソースファイルと同じディレクトリにあるヘッダファイルをインクルードする場合にはファイル名を'"' (ダブルクオーテーション)で囲みます。 異なるディレクトリにある場合には'<'、'>'で囲みます。

C標準ライブラリ

C標準ライブラリとは、C言語自体が提供しているライブラリのことです。

主に次のヘッダファイルがあります。

assert.h 診断機能
ctype.h 文字操作
errno.h エラー
float.h 浮動小数点型の特性
limits.h 整数型の大きさ
locale.h 文化圏固有操作
math.h 数学
setjmp.h 非局所分岐
signal.h シグナル操作
stdarg.h 可変個数の実引数
stddef.h 共通の定義
stdio.h 入出力
stdlib.h 一般ユーティリティ
string.h 文字列操作
time.h 日付及び時間

この中から、必要な関数があるものをインクルードします。

ここで次のコードを見てください。

puts関数が出ています。これはどういう関数でしょうか?この関数はC標準ライブラリの関数なので関数名でググってみます。 大概は「関数名 man」で適当な情報が出ます。
http://linuxjm.osdn.jp/html/LDP_man-pages/man3/putc.3.html
以下の様な点に着目して見てください。