雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
2: 2007-01-10 (水) 09:47:53 ソース バックアップ No.2 を復元して編集 3: 2007-01-10 (水) 21:40:55 ソース バックアップ No.3 を復元して編集
Line 96: Line 96:
これはJAVAだろうがD言語だろうがC++だろうが同じです。 これはJAVAだろうがD言語だろうがC++だろうが同じです。
 +
 +さて、話のC言語ですが、上記の例を見ればわかるとおり、解りやすく書かれたC言語はCコンパイラというソフトによってマシン語に翻訳されるのですが、実はC言語は、「入出力」の命令を一切持っていません。入出力。すなわち、
 +--画面になにか表示する
 +--キーボードやマウス等からの信号を受け付ける
 +こういったことは、''純粋な意味でのC言語''では、一切できないのです。
 +
 +「え〜?そんなアホな! だって俺は現にC言語でHello! Worldという文字を表示できているぞ!画面だぞ!ウソつくな!」
 +
 +こんな声が聞こえてきそうですが、ウソではないのです。C言語の命令をいくら駆使しても、画面の文字を出すことはできません。
 +
 +C言語は、自分自身で文字を出力することはできませんが、''アセンブラやC言語等で作られたマシン語の命令の塊を関数として呼び出して使うことができる''のです。
 +
 +この、アセンブラやC言語で作られた様々な命令の塊を「ライブラリ」といい、ライブラリにどんな関数が入っているのかという目次を書いたものを「ヘッダーファイル」と言います。
 +
 +ヘッダーファイル(関数の目次)をC言語のソースにはさみこむことで、それ以降はじめて、今までのCにはなかった命令が使えるようになります。
 +
 +もっとも有名な「printf」関数。画面に文字を出す関数ですが、これもC言語に内臓されているのではなく、別に用意されたライブラリ+その目次であるヘッダーファイルを挟み込むことで初めて使うことができるのですね。
 +
 + ソースファイル              Cコンパイラ
 +
 + Main(){                    ←ふむ。最初に実行される関数だね。
 +   int a;                  ← 変数の定義か。これはできるぞ!
 +   a = 16;                  ←ふむ。変数に値を代入だね。OK。
 +   printf("%f %e", a);      ←・・・はぁ?なんだこの命令?しらんぞ!
 +       }                    ←がーん。へんな命令がある!翻訳できないよ〜!
 +
 +''純粋なC言語''だと、こうなってエラーになってしまいます。
 +
 +しかし、どこかの誰かがアセンブラやC言語で、printfという、画面に文字を出す命令を作ってくれました。そしてそれらの関数を何個かひとまとめにしてライブラリを作っておいてくれました。あとは、C言語の中にヘッダーファイルをはさみこみ、「こんな名前の関数を作っておいたよ。使っていいよ〜」とすれば、printfを使えるようになるのです。
 +
 +
 + ソースファイル              Cコンパイラ
 +
 + <#include stdio.h>          ←ふむ。stdio.hというファイルを読もう。なになに?いろんな関数があるなぁ。
 +
 + Main(){                    ←ふむ。最初に実行される関数だね。
 +   int a;                  ← 変数の定義か。これはできるぞ!
 +   a = 16;                  ←ふむ。変数に値を代入だね。OK。
 +   printf("%f %e", a);      ←お?この命令は知らないけど、たしかライブラリにあるな。それをそのまま使おう!
 +       }                    ←よーし。全部知ってる命令だった。翻訳できた〜
 +
 +とまあ、こういう仕組みになります。