プログラミング演習I 2004年4月28日(第3回) 木村巌 今日やること:知識編:コンパイル コンパイルとは何をすることなのか 今日やること:実践編:コンパイルし てみる プリプロセッサ コンパイラ アセンブラ リンカ 実際に各過程を見てみよう 教科書1章、2章を参照のこと ソースコード作成の準備 準備 cd /cygdrive/z/ mkdir 040428 cd 040428 ディレクトリの移動 040428というフォルダを作製 そのディレクトリに移動 Cコンパイラの起動 ソースコードの準備 秀丸エディタで、次の内容を打ち込む(半角英数字で) 行頭の空白はタブキーで! #include <stdio.h> int main (void) { printf (“Hello World!\n”); return 0; } 先ほど作ったフォルダに、Sample1.cという名前で保存 Cコンパイラの起動(続き) Cygwinのウィンドウで、 ls 自分が打ち込んだ、Sample1.cというファイルがあ ることを確認 gcc -o Sample1 Sample1.c ./Sample1 うまくいけば、Hello World!が表示される Sample1を見ながら プログラムは基本的には英数字小 文字で #で始まる行は、コンパイラへの指示 int main (void) は、mainという関数が引 数をとらず、整数型の値を返すことを 意味する {}に囲まれた部分がmain関数の本体. printf()は、引数を書式付で出力する 標準ライブラリ関数 Sample1を見ながら(続き) 関数名を書くと、その関数が実行される ただし、main()は特別で、プログラム内で最初に実行 されることが保証される 関数に対して、カッコ内に引数を書く セミコロン;で区切った行が一つのstatement 引数がprintf()によって印字される 戻り値0を環境に返す 改行文字などについては、教科書のLesson 2.2など を参照 Coding Standard Coding Standardとは 改行や、行頭の空白の数、括弧の位置などを指定し たもの Cのプログラムは、自由書式で書かれる 人間が見やすいように! しかし統一が必要である(特に複数人で開発すると きは) この授業では、GNU Coding Standardに準拠する(教 科書とは違う).この文書の「C言語の上手な書き 方」参照. コンパイルとは何か? 人間が読めるCのソースを、コンピュータが 実行できる形式に翻訳する プリプロセス、コンパイル、アセンブル、リン ク、の過程に分かれる. コンパイルの各過程(1) プリプロセス */で挟まれた部分)を空白に置き換える #include <ファイル名.h>を、そのファイルの内容と 置き換える その他(定数の定義、条件コンパイルなどプリプ ロセッサの他の機能は後の回で紹介します) コメント(/* コンパイルの各過程(2) コンパイル プリプロセスがすんだCのソースを、アセンブラへ 翻訳 アセンブラ? 機械語ともいう. CPUに直接命令する形式の、機械に密着したレ ベルの言語 まだ人間が読める(端末に表示できる) コンパイルの各過程(3) アセンブル アセンブラを、コンピュータが直接実行できるファ イルに変換 できたファイルを、オブジェクトファイルともいう この時点で、直接端末に表示することはできない コンパイルの各過程(4) リンク オブジェクトファイルを、最終的な実行可能ファイ ルに変換する 複数のファイルからなるプログラムなら、それらを 一つに結合 標準ライブラリ関数、もし必要であれば数学関数 など、他のライブラリを結合 スタティックリンクとダイナミックリンク 実際に各過程を見てみよう 前回のSample1.cを例に、各過程を見る gcc –E Sample1.c | less これがプリプロセス後のファイル gcc –S Sample1.c less Sample1.s これが、コンパイル後のアセンブラファイル 実際に各過程を見てみよう(続) gcc –c Sample1.c ls Sample1.o objdump –d Sample1.o | less これがオブジェクトファイルとアセンブラの対応 gcc –o Sample1 Sample1.c objdump –d Sample1 | less これが、実行可能ファイルとアセンブラの対応 リンカが付加した情報が増えている 書式付き出力printf() Cのプログラムでは、文字列だけでなく、様々 な「型」をもつデータを入出力する 文字定数、整定数、浮動小数点数など それらのデータを、文字として出力するのが、 printf()という標準ライブラリ関数 Lesson 2.3のSample4を参照(p.29--) まとめ 実際にソースコードを入力し、コンパイル、実 行という一連の操作を体験した 「コンパイル」の時に、実際は何が行われてい るのかを学んだ レポート課題 問.実行すると、 My name is 自分の名前(ローマ字で). と表示するプログラムを作成し、 コンパイルと実行の仕方 ソースコードとアセンブラ(.sという拡張子のファイ ル) をメールで提出せよ 締め切り:2004年5月11日一杯(日本時間で) 提出先:メールで木村([email protected] u.ac.jp)まで.
© Copyright 2024 ExpyDoc