Presentation is loading. Please wait.

Presentation is loading. Please wait.

オブジェクト指向言語論 第七回 知能情報学部 新田直也.

Similar presentations


Presentation on theme: "オブジェクト指向言語論 第七回 知能情報学部 新田直也."— Presentation transcript:

1 オブジェクト指向言語論 第七回 知能情報学部 新田直也

2 プリプロセッサ プリプロセッサ; コンパイルに先立って行われるソースコードの 書き換え.
ディレクティブ: ソースコードの書き換え命令.Cでは,# で始まる.

3 マクロ定義 マクロ定義: #define A B A を B と定義する. (プログラム中の A を B と置き換える.)
例: #define TRUE (1) #define FALSE (0) #define PI #define square(x) (x * x) // 引数を持つマクロ 注意: square(a++) は,(a++ * a++) と置き換えられる.

4 ファイルインクルード ファイルインクルード: ヘッダファイル(.h)をソースファイル(.c)の先頭に読み込むことができる. #include <パス名> // 標準ディレクトリ#include “パス名” // カレントディレクトリ ヘッダファイルに含まれるもの #define 文 構造体の宣言 プロトタイプ宣言 外部変数(他のファイルにある大域変数)の参照

5 条件コンパイル 条件コンパイル: 条件部が真のときのみコンパイルする. #if #else #endif #ifdef #ifndef :
テスト用のコードや古いコードを残しておきたい場合など. #define DEBUG (1) : #if DEBUG [テスト用のコード] #endif (0) //#define DEBUG (1) #define DEBUG (1) : #ifdef DEBUG [テスト用のコード] #endif

6 分割コンパイル(1) プログラムの作成は分業で行われる.

7 分割コンパイル(2) プログラムは複数のソースファイルに分割される.

8 分割コンパイル(3) 各ソースファイルは別々にコンパイルされる コンパイル リンク コンパイル

9 分割コンパイル(4) 他の人のヘッダファイルを利用する場合もある コンパイル インクルード コンパイル

10 ヘッダファイルの役割 他のファイルが宣言を参照する場合. <item.h> <class.c>
#define ARRAY_MAX (1000) struct List { int items[ARRAY_MAX]; int num; }; void init_list(struct List *l); : <class.c> #include “item.h” #include “class.h” : int create_class( … struct List l; init_list(&l); <item.c> #include “item.h” void init_list(struct List *l) { :

11 ライブラリ ライブラリ: あらかじめコンパイルされているオブジェクトファイル. 一般にソースコードは存在しない.
他の言語(アセンブラなど)でコンパイルされている場合も. 利用するにはヘッダファイルが必要. コンパイル リンク インクルード

12 標準ライブラリ(1) 標準ライブラリ: コンパイラと一緒に提供されているライブラリ. コンパイラメーカが作成し,コンパイルしたもの.
基本的な関数(特に入出力関数)が含まれている. printf scanf strlen strcpy malloc free : stdio.h string.h stdlib.h

13 標準ライブラリ(2) 標準ライブラリの内容はコンパイラによって異なる MSVC GCC

14 構造化プログラミング 構造化定理 モジュール化 ソフトウェアの設計の重要性
分割コンパイルの単位(個々のソースファイル)をモジュールと呼ぶこともある. プログラム全体を予め複数のモジュールに分割し,分業して開発することで,ソフトウェアの生産性,信頼性が向上する. プログラムをどのようにモジュール分割するかは,設計上の重要な問題. ソフトウェアの設計の重要性

15 C言語の設計 なぜC言語なのか? 設計がシンプルであること 高級言語であること 高速であること メモリ操作ができること 関数を記述単位とする
式の評価の一貫性 入出力関数を言語仕様に含んでいない 高級言語であること 構造化プログラミング 構造体などのサポート 高速であること コンパイラ,ポインタの使用 メモリ操作ができること ポインタ,配列

16 そしてオブジェクト指向へ… より高級化を目指す言語発展の歴史. 高級化には「思想」が必要. 高級化の失敗例? 失敗の理由: 人工知能 関数型
形式的仕様記述 失敗の理由: コストに見合わない 難しすぎる 現実のソフトウェアに合わない 社会のニーズに 答えていない!!


Download ppt "オブジェクト指向言語論 第七回 知能情報学部 新田直也."

Similar presentations


Ads by Google