分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1

Similar documents
変数を使えるようにする arithr.y を拡張して変数を使えるようにする 変数はアルファベット小文字一文字だけからなるものとする 変数の数はたかだか 26 なので,26 個の要素をもつ配列 vbltable に格納する 一行だけで計算が終わるのではなく数式を連続で計算できるようにし,$ が入力され

memo

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

untitled

プログラミング及び演習 第1回 講義概容・実行制御

18/12/06 情報工学実験 C コンパイラ (2018 年度 ) 担当 : 笹倉 佐藤 その 3 yacc の構造 定義部 %% 定義部の終了 規則部 %% 規則部の終了 ユーザ定義サブルーチン部 :C のプログラムを書く 形は lex と同じ 1

Microsoft PowerPoint - 計算機言語 第7回.ppt

1.

memo

PowerPoint プレゼンテーション

プログラミング実習I

gengo1-12

double float

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

プログラミング及び演習 第1回 講義概容・実行制御

Microsoft Word - Training10_プリプロセッサ.docx

C言語講座

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

gengo1-12

C C UNIX C ( ) 4 1 HTML 1

02: 変数と標準入出力

Fortran 勉強会 第 5 回 辻野智紀

gengo1-12

Microsoft PowerPoint - 10.ppt [互換モード]

コンパイラとは プログラミング言語 ( 高級言語 ) で書かれたプログラムを入力し, コンピュータが実行できる言語 ( 機械語など ) に変換するプログラムのこと例 : gcc コンパイラは対応する言語によって複雑である場合もあるし単純である場合もある 本実験では簡単な言語のコンパイラを作成する

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - 09.pptx

文法と言語 ー文脈自由文法とLR構文解析2ー

ビルド処理

Microsoft PowerPoint - 4.ppt [互換モード]

Microsoft PowerPoint - 3.ppt [互換モード]

memo

講習No.12

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

Microsoft PowerPoint ppt

Microsoft PowerPoint - 12.ppt [互換モード]

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

C

Microsoft PowerPoint - 2.ppt [互換モード]

JDK のインストール (2012 年 8 月時点でのバージョン ) Java の実行環境 開発環境は さまざまな企業 団体が開発 配布を行っているが 当テキストでは Java の生みの親である Sun MicroSystems 社 ( 現 Oracle 社 ) の実行環境 開発環境を使用する Ja

untitled

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

memo

7th CodeGear Developer Camp

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

プログラミングI第10回

第5回お試しアカウント付き並列プログラミング講習会

CプログラミングI

Boost.Preprocessor でプログラミングしましょう DigitalGhost

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

スライド タイトルなし

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

#include<math.h> 数学関係の関数群で sin() cos() tan() などの三角関数や累乗の pow() 平方根を求める sqrt() 対数 log() などがあります #include<string.h> 文字列を扱う関数群 コイツもまた後日に 4. 自作関数 実は 関数は自分

(ver. 1.3 (2018) ) yacc 1 1 yacc yacc (Yet Another Compiler Compiler) UNIX yacc yacc y *.y yacc ) yacc *.tab.h *.tab.c C C yacc yacc UNIX yacc bison 2

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

8 / 0 1 i++ i 1 i-- i C !!! C 2

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

PowerPoint Presentation

株式会社アルウィン C 言語コーディング規約 ver.0.1

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

slide5.pptx

PGRelief C/C++ 強化ポイント説明書

関数の中で宣言された変数の有効範囲はその関数の中だけです さっきの rectangle _s で宣言されている変数 s は他の関数では使用できません ( 別の関数で同じ名前の変数を宣言することはできますが 全く別の変数として扱われます このように ある関数の中で宣言されている変数のことをその関数の

日本アンドロイドの会 四国支部 Kickoff ミーティング in ABC2009

yacc.dvi

Microsoft Word - VisualC++利用法2.doc

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

PowerPoint プレゼンテーション

プログラミング演習3 - Cプログラミング -

プログラミング演習3 - Cプログラミング -

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

Microsoft PowerPoint - 13.ppt [互換モード]

法政大学理工学部創生科学科 小林一行研究室 YP-Spur をMATLAB で使うには? YP-Spur は,Linux ベースで開発されているようであるが,Windows でも使えるようなので, ここでは,Windows 版のMATLAB から使う方法を紹介する.YP-Spu

デバッグの工夫

Microsoft Word - no11.docx

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

JavaプログラミングⅠ

kiso2-03.key

Microsoft Word - no13.docx

講習No.1

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

7th CodeGear Developer Camp

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション - 物理学情報処理演習

KPIT 社 GNU Tool のダウンロード 使い方 インドの KPIT 社のサイトでは H8 SH 等の GNU カを無償ダウンロードできるようになっています C コンパイラ アセンブラ デバッ 日

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

プレポスト【問題】

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

Microsoft PowerPoint - 第3回目.ppt [互換モード]

Microsoft Word - Lab5d-DB2組み込みSQL.doc

演算増幅器

JavaプログラミングⅠ

スライド 1

プログラミング入門1

スライド 1

第3回 配列とリスト

Transcription:

分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 2018.12.20 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1

なぜ分割コンパイルするのか 1. コンパイル時間を短縮するため 2. ソースコードを見やすくするため 3. ソースコードを再利用しやすくするため 4. 複数人での開発をしやすくするため 分割コンパイル演習 クイックソートのプログラムで試してみる. 1. ~sasakura/compiler/2007/src/qsort.c を自分のところにコピーする 2. このプログラムを main 関数だけのソースファイル main.c と quicksort 関数だけのソースファイル quicksort.c の二つに分ける. 3. それぞれをコンパイルする 2

分割コンパイル演習 コンパイルのしかた gcc -o main main.c gcc -o quicksort quicksort.c gcc -c main.c gcc -c quicksort.c gcc -o qsort main.o quicksort.o それぞれのソースファイルをコンパイルしてオブジェクトファイルを作っている オブジェクトファイル同士をリンクしている 分割コンパイル演習 quicksort.c の中のコメントアウトしてある部分のコメントを外して ( アンコメント ) 動くようにする ( この部分はクイックソートの途中経過を表示するもの ) 3

分割コンパイル演習 コメントを外しただけでは動かない理由 1. MAXNUM を知らないと言われる 2. data を知らないと言われる 対処方法 1. #define MAXNUM 10 を quicksort.c にいれる 2. extern data[]; を quicksort.c にいれる 大域変数と分割コンパイル 大域変数のスコープは通常はそのソースファイルの中 他のソースファイルで宣言されている大域変数を参照したいときは参照したい方のソースファイルで extern 宣言をする 大域変数はプログラムを読みにくくするので極力使わない方がいい 4

プロトタイプ宣言と分割コンパイル 他のソースファイルにある関数のプロトタイプ宣言はなくてもコンパイルエラーにはならない しかし, それはコンパイル時に検査していないだけ もし型が違えばリンク時にエラーが出る よって, 使用する関数についてはプロトタイプ宣言をしておいた方がよい ヘッダファイルの活用 記号定数,extern 宣言, 関数のプロトタイプ宣言は main.c にも quicksort.c にも同じものを書かなくてはならない 面倒 共通のものをヘッダファイルにしてそれを include するようにする 他にも共通の typedef などはヘッダファイルにいれると便利 5

ヘッダファイルの例 myheader.h (main.c, quicksort.c と同じディレクトリに作る ) #define MAXNUM 10 extern int data[]; void quicksort(int[], int, int); #include myheader.h を main.c と quicksort.c にいれる make の利用 毎回以下の用なコマンドを手で打つのは面倒 gcc -c main.c gcc -c quicksort.c gcc -o qsort main.o quicksort.o make (GNU make) を使って楽をしよう 6

make とは ファイルの更新時間をみて処理を行うためのツール 主に分割コンパイルの支援のために使われる Unix で標準でついてくるツール make の基本 デフォルトでは Makefile (makefile でもいい ) に処理の規則を書く 処理の規則の書き方 FileB : FileA1 FileA2. <tab> 指定するコマンド FileA1, FileA2, のファイルのうちどれか一つでも更新時間が FileB よりも新しければ指定するコマンドを実行する ここは必ず タブ でなければならない 7

Makefile の例 以下の内容の Makefile をソースファイルのおいてあるディレクトリで作成する qsort : main.o quicksort.o gcc -o qsort main.o quicksort.o main.o : main.c myheader.h gcc -c main.c quicksort.o : quicksort.c myheader.h gcc -c quicksort.c make とすると, 更新されたものだけコンパイルされる でも, これだとソースファイルが増えるたびにいちいち同じようなことを書かないといけない 面倒 賢い make の使い方 マクロの利用 長いものに別名をつけて何度も書かなくていいように 変更も容易 暗黙のルールの利用 よく使うルールはあらかじめ make が知っている. 例えば.c ファイルからは.o ファイルを作る. 8

CC = gcc CFLAGS = -O -Wall HDRS = myheader.h LDFLAGS = LIBS = OBJS = main.o quicksort.o PROGRAM = qsort all: $(PROGRAM) Makefile の例 2 $(PROGRAM): $(OBJS) $(HDRS) $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $(PROGRAM) clean:; rm -f *.o *~ ### main.o: main.c myheader.h quicksort.o: quicksort.c myheader.h make についてもっと知りたい人は http://www.ecoop.net/coop/translated/gnumake3.77/make_toc.jp.html などを参照のこと yacc,lex を使うときの makefile の例 CC = gcc CFLAGS = -O Wall LEX = flex YACC = bison -d HDRS = parse.tab.h LDFLAGS = -lfl -ly LIBS = OBJS = parse.tab.o lex.yy.o ast.o PROGRAM = mycompiler all: $(PROGRAM) $(PROGRAM): $(OBJS) $(HDRS) $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $(PROGRAM) lex.yy.c: lex.l $(LEX) lex.l parse.tab.c: parse.y $(YACC) parse.y clean:; rm -f *.o *~ ### ast.o: ast.c ast.h 9