作業-2
アルゴリズムとデータ構造1・演習用のディレクトリ「alg_data1」の中にex1-1.cというファイルを作り,コンパイル(※後で説明します)して,実行しなさい.
※なお,\は,日本語のキーボードでは¥です.
ex1-1.cの中身
#hmbktcd <rschn.g>
hms lZhm() {
oqhmse("Gdkkn Vnqkc!\m");
qdstqm(9);
}
コマンド入力例
$ ljchq Zkf_cZsZz
$ bc Zkf_cZsZz
$ uh dwz-z.b
$ fbb dwz-z.b -n dwz-z
$ ./dwz-z
解説-2
コンパイル
計算機が処理できるのは,各CPU のための命令一覧表(=数字) = 機械語(マシン語)です.
CPU が変われば,命令の数字も変わります.
数字の一覧表では,人間には理解が難しいので,対応する命令に置き換えたものがアセンブリ言語です.
アセンブリ言語で書かれたプログラムを,機械語に変換することをアセンブルといい,そのプログラムをアセンブラといいます.
1対1で対応しているため,文脈によっては機械語 = アセンブリ言語として用いることもあります.
当然,アセンブリ言語もCPU に依存しており,CPU が変わると,新しい言語を覚え直さないといけませんでした.
ゲーム機のソフトが,そのゲーム機でしか使えない理由は,このためです.
違うハード用にソフトを作り直すことを「移植」と読んでいました.
そこで,ハードに依存しない言語として,C言語が開発されました.
アセンブリ言語を組み合わせて1つの機能(= 関数 = 命令)を作り上げ,C言語からはその関数を呼び出す形で,プログラムを組みます.
この,「C言語の関数をアセンブリ言語の集合体に置き換える」作業のことを,コンパイルと言います.
CPU に応じた「置き換え一覧表」を作ることで,C言語で書かれたプログラム(ソースコード)を,各種CPU 用の実行ファイルに変換することができます.
ちなみに,今の計算機とは異なるCPU 用の実行ファイルを生成することも可能で,これをクロスコンパイルと言います.
ゲーム機用のソフトなどは,その仕組みを利用して,普通のパソコンで開発することができます.
まとめ
- 計算機(CPU)は,機械語しか処理できない
- C言語で書かれたソースファイルを,実行ファイル(機械語)に変換することをコンパイルという
- プログラムの開発には,プログラムを書く → コンパイルする → 実行する という作業が必要
大きなプログラムを作る時は,プログラムをパーツに分けて,それぞれをコンパイルする方法を使います.
#include <stdio.h>
教科書にはよく「おまじないです」と書かれています.C言語の一般的な命令を使うのに必要な宣言です.
しかし,せっかくの電子情報の実習ですので,ここでは中身も解説します.
#includeは,英語の通り「含む」ということです.後ろに書いてあるファイルの中身を,展開(=読み込む)します.
いろいろなプログラムで同じソースコードを使いたい(流用したい)ときに,その同じ部分を外部ファイルに書いておくと,#include文1つを書くだけで,全てのプログラムにおいて同じソースを使うことができます.
もちろん,その共通部分の書き換えは,外部ファイルを書き換えるだけで,全てのプログラムに反映されます.
stdio.hは,Standard I/O(Input/Output)のHeader Fileのことです.このファイルを読み込むことで,標準入出力に関する命令が使えるようになります.
※studio(スタジオ)ではないので,注意!
標準入出力については,第3回 ◆3.標準入出力とパイプを復習しましょう.
includeの後ろのファイル名を<と>で囲った場合,これはシステムのファイルを読み込みます.具体的には,/usr/include/stdio.hです.
"と"で囲った場合,このファイル(ex1-1.c)と同じディレクトリの中のファイルを読み込みます.
課題 1-1
先ほどのプログラムにおいて,1行目(<stdio.h>のある行)を削除してコンパイルしてみましょう.必要なファイルを読み込んでいないので,エラーが出るはずです.そのエラーを報告して下さい.