情報科学&情報科学演習

2013年度
プログラミングⅡ
~ 関数を利用しよう ~
担当教員: 幸山 直人
2013年度 プログラミングⅡ
関数に関する注意事項
関数を使うときは「プロトタイプの宣言」を行う
 「main」関数は最初に実行されるプログラム
 変数の有効範囲に気をつける

(ローカル変数とグローバル変数)

関数の引数と戻り値(return)に気をつける
配列を渡す場合は、配列の先頭アドレスが渡される。よって、
呼び出す側の関数と呼び出される側の関数で同じ配列が使
用される(1変数の場合は値がコピーされるので呼び出す側
の関数と呼び出される側の関数では値が異なる)。なお、配
列の終りはプログラマが責任を持って処理する。また、2変
数以上を呼び出す側の関数に返したい場合は、配列やグ
ローバル変数を用いるか、ポインタ・構造体などを用いる。
2013年度 プログラミングⅡ
標準ライブラリ関数




「printf()」や「scanf()」などは最初から準備されてい
る標準ライブラリ関数である
ヘッダファイル「*.h」には標準ライブラリの各関数の
プロトタイプが宣言されている(「include」ディレクト
リに保存されている)
標準ライブラリは各関数がコンパイルされたオブ
ジェクトモジュール(プログラムの部品)の塊である
(「lib」ディレクトリに保存されている)
プリプロセスを確認
「cl.exe /E hogehoge.c」(コメントなし&標準出力)
「cl.exe /P /C hogehoge.c」(コメントあり&ファイルへ出力)
2013年度 プログラミングⅡ
高級言語から機械語へ(再掲)
hogehoge.c
コンパイラ
(翻訳プログラム)
hogehoge.obj
リンカ
(連結編集プログラム)
hogehoge.exe
ソースプログラム
(原始プログラム)
コンパイル
関数の定義が記述された一覧
(辞書の索引のようなもの)
ヘッダファイル
オブジェクトモジュール
(目的プログラム)
リンク
ロードモジュール
(実行可能ファイル)
ライブラリ
関数に対応する機械語プログラム
の集合体(最初から準備されている
ライブラリを標準ライブラリと呼ぶ)
2013年度 プログラミングⅡ
コンパイルとリンク(再掲)
字句解析
プリプロセス
構文解析
コンパイル
コンパイル
アセンブル
意味解析
コード最適化
コード生成
リンク
オブジェクトモジュールとライブラリ(標準ライブラリなど)をリンクし、
ロードモジュールを作成する。完全な機械語プログラムになる。
2013年度 プログラミングⅡ
コンパイルとリンクに関する補足
コンパイルのみ
「cl.exe /c hogehoge.c」
 コンパイルのみの機械語
「dumpbin.exe /DISASM /RAWDATA
hogehoge.obj」
 コンパイル&リンク
「cl.exe hogehoge.c」
 ロードモジュールの機械語
「dumpbin.exe /DISASM /RAWDATA
hogehoge.exe」

2013年度 プログラミングⅡ
数学関数(math.h)
多くの関数の引数と戻り値はdouble型
 予め定義された変数がある(#define)

例えば主な数学関数
「物理のかぎしっぽ」
補足:自前のヘッダファイルやライブラリを作ることも可能