プログラミング演習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 2026 ExpyDoc