Changes between Version 9 and Version 10 of HowTo/CTutorial


Ignore:
Timestamp:
Sep 5, 2010, 2:32:30 PM (14 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/CTutorial

    v9 v10  
    179179観念的に分かりやすいのは C 言語の中だけでよく、変換されたマシン語においては、分かりやすい表現よりも動作効率や実行ファイルサイズの小ささの方が重要になります。 GCC は imull 命令を用いるより leal 命令と sall 命令を用いた方が動作が速くなると判断し、そのようなアセンブリ言語プログラムを生成したのでした。
    180180
     181=== 必要最小限の命令セット ===
     182
     183C 言語自体が用意している命令は、大きく分けて以下の 3通りです。
     184
     185 * 宣言のための命令。以下のようなものがある。
     186   * 型名 (int, char, float, unsigned など)。変数や関数を宣言するときに用いる。
     187   * 修飾子。型名を用いて宣言を行う際に、オプションとして指定する。定数である (値が変化しない) ことを宣言する const 、レジスタを用いるよう指示する register 、コンパイラによる最適化を抑制するよう指示する volatile などがある。
     188   * 構造体を宣言する struct 、共用体を宣言する union 、列挙子を宣言する enum 、型の別名を宣言する typedef など。これらは、 C 言語に最初からは存在しない新たな型を定義するのに用いられる。
     189 * 処理の流れを制御する命令。以下のようなものがある。
     190   * 分岐命令 (if - else, switch)。
     191   * ループ命令 (for, while, do - while)。
     192   * ループの復帰および離脱 (continue, break)。
     193   * ジャンプ (goto)。
     194   * 関数からの復帰 (return)。
     195 * 演算子。いろいろある。
     196
     197これ以外のことはすべて、関数によって記述されます。具体的には、データの切り貼りや、入出力などです。
     198
     199C 言語が用意している命令だけではできないことの多くは、 C 言語の標準規格として定められている'''標準ライブラリ'''によって提供される関数を用いて実現することができるでしょう。標準ライブラリに精通することは、 C 言語を実用的に使いこなすようになるための早道であると言えるかも知れません。
     200
     201標準ライブラリでもできないことをするにはどうすればよいかというと、いくつかのアプローチが考えられます。まず、 C 言語で書いたプログラムを実行する環境が、 Unix ライクな OS や Windows などの PC であるなら、それらの OS が提供する'''システムコール'''や '''API''' を調べてみると良いでしょう。また、とある既存のアプリケーションのプラグインツールを開発するようなケースであれば、そのアプリケーションのベンダーが API にアクセスするための'''開発キット''' (SDK と呼ばれるもの) を提供しているでしょう。これらはいずれも (基本的には) 機能を利用する為に用意された関数を呼び出せばよいようになっているはずです[[FootNote(プラグイン開発なんかの場合、既存アプリケーションがプラグインツールの関数を呼び出すルールが定められていて、そのルールの通りにプログラマーが関数を用意すればいい、というケースもあります。)]]。
     202
     203あるいは、 OS そのものを開発したい場合や、家電製品などの組み込み用マイクロチップで動作する制御プログラムを開発するような場合には、入出力に関するハードウェアの仕様を把握した上で、アセンブリ言語で記述した入出力用の関数を自前で用意する、といったアプローチが現実味を帯びてくるでしょう。
     204
     205[[FootNote]]