Changes between Version 1 and Version 2 of HowTo/CTutorial


Ignore:
Timestamp:
Sep 2, 2010, 11:38:45 PM (14 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/CTutorial

    v1 v2  
    121121       * 書き出し用バッファ上の文字列に、上で変換された文字列を繋げる ('''strncat''')。
    122122       * 書き出し用バッファ上の文字数が一定数を超えた場合、その文字数までを一旦別のバッファにコピーしてから ('''strncpy''') 表示し ('''printf''')、表示した分の文字列を領域から取り除く ('''strcpy''')。
     123
     124この中で、括弧書きで強調表示しているのはすべて関数名です。 main 関数と genNextPrime 関数、 printByComma 関数はサンプルのプログラム中で定義している関数ですので、その関数の中での手続きも合わせて書き出してみました。こうしてみると、処理内容をツリー状に書き表せるということがよく分かると思います。
     125
     126C 言語はこのように、 main 関数から処理が開始され、関数の中で別の関数を呼び出し、その関数がまた更に別の関数を呼び出す、ということの繰り返しによって、プログラムを成り立たせる。そんなスタイルの言語なのです。
     127
     128=== 言語として最低限の命令しか用意していない ===
     129
     130C 言語が、言語として用意している命令は、ごくわずかです。どんなものがあるかというと、概ね以下の通りです。
     131
     132 * 宣言子 (int, char などの型指定子、 const, volatile などの型修飾子、 その他、 struct, enum, typedef 等々…)。
     133 * 処理の流れ制御 (if, switch などの分岐、 for, while などのループ、 ループから抜ける break やループを強制的に回す continue 、関数を抜ける return 等々…)。
     134 * 演算子 (四則演算の +, -, *, / 、代入 = 、ポインタ演算子 * やアドレス参照 & 、括弧 () 、比較 <, >, == 、等々…)。
     135
     136それ以外のことは、すべて関数で表現します。例えば、画面に文字を表示するのも、 C 言語に用意された命令ではなく、'''誰かが'''用意した関数を呼び出すことで実現するのです。
     137
     138…といっても、心配することはありません。例えば、上記サンプルプログラムにおいても、画面に文字を表示するのに、 printf や puts といった名前の関数を利用していますが、これらはプログラマーが自分で定義した関数ではなく、 C コンパイラーを作った人々 (ベンダー) が用意している'''標準ライブラリ'''において用意されている関数です。標準ライブラリにどのような関数が用意されているかは、 ANSI や ISO などによって標準規格として定められており、それらの関数を用いる範囲内においては、ある程度の可搬性 (即ち、 OS や C コンパイラが変わっても、コンパイルが通り、同じような動作をしてくれること) が期待できるのです。