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

Slides:



Advertisements
Similar presentations
1 全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える 処理後のデータを出力ファイルに書き出す 画像データ用に確保したメモリを解放.
Advertisements

構造体変数 1234 x xyz A 普通の変数 ( ここでは座標値 ) 構造体変数 ( ここでは点を表す ) xyz B 14 y 5 z 点 A の x 座標 プログラム中では A.x 点 B の y 座標 プログラム中では B.y 例えば 「 3 次元空間で2点 A と B の 間に線分を引き・・・」
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
第13回構造体.
データ構造とアルゴリズム 第10回 mallocとfree
第12回構造体.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第2回ネットワークプログラミング 中村 修.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
第8回 プログラミングⅡ 第8回
情報処理Ⅱ 2006年1月13日(金).
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
補足説明.
プログラミング論 ファイル入出力
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
情報処理Ⅱ 2008年1月21日(月).
プログラミング 4 記憶の割り付け.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第11回 情報工学科 篠埜 功.
同じ構造をした「引き出し」変数を構造体変数と呼ぶ
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
プログラミング論 ファイル入出力
第11回 プログラミングⅡ 第11回
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
情報処理Ⅱ 2007年1月19日(金).
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング演習I 2003年4月30日(第3回) 木村巌.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
C プログラミング入門 基幹7 (水5) 14: 発展事項
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
情報処理Ⅱ 2007年2月2日(金).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
情報処理Ⅱ 第9回:2003年12月16日(火).
14: 発展事項 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
C プログラミング入門 総機1 (月1) 14: 発展事項
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

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

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

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

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

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

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

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

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

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

ヘッダファイルの役割 他のファイルが宣言を参照する場合. <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) { :

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

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

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

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

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

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