分割コンパイルとスコーピング 数理情報システム工学科 担当: 汐月哲夫 2015/10/1 プログラミング方法論 [email protected] 1 処理単位(復習) プロセス(タスク) プログラム 関数 (ブロック) 文 機械語 アセンブラ 2015/10/1 ; {} ヘッダ {} C言語 プログラミング方法論 [email protected] 実行 ファイル OS 2 ファイルの分割 prog.c main.c main() { fun1(); fun2(); } main() { fun1(); fun2(); } fun1() { return 1; } fun1.c 3つの ファイル に分割 fun2.c fun2() { return 2; } 2015/10/1 fun1() { return 1; } fun2() { return 2; } プログラミング方法論 [email protected] 3 分割コンパイル、makeの記述 CC = gcc CFLAGS = prog: main.o fun1.o fun2.o $(CC) $(CFLAGS) -o $@ $^ fun1.o: fun1.c $(CC) $(CFLAGS) -c -o $@ $< fun2.o: fun2.c $(CC) $(CFLAGS) -c -o $@ $< main.o: main.c $(CC) $(CFLAGS) -c -o $@ $< 2015/10/1 プログラミング方法論 [email protected] 4 ファイルの分割とスコープ 関数名はプログラム全体で有効(global) main.c int x,y; static int z; main() { int a,b,c; fun1(); fun2(); fun1.c fun2.c fun1(int x) { int y; fun2(int x) { int z; return 1; return 2; } } } 2015/10/1 プログラミング方法論 [email protected] 5 ファイルの分割とスコープ ブロック内で宣言された変数の 変数名はブロック内で有効 main.c int x,y; static int z; main() { int a,b,c; fun1(); fun2(); fun1.c fun2.c fun1(int x) { int y; fun2(int x) { int z; return 1; return 2; } } } 2015/10/1 プログラミング方法論 [email protected] 6 ファイルの分割とスコープ ブロック外で宣言された変数の 変数名はプログラム全体で有効(global) main.c fun1.c fun2.c int x,y; static int z; extern x; extern y; fun1(int z) { int y; fun2(int x) { int z; return 1; return 2; main() { int a,b,c; fun1(); fun2(); } } } 2015/10/1 プログラミング方法論 [email protected] 7 ファイルの分割とスコープ static 宣言された関数名、変数名 は同一ファイル内で有効 main.c int x,y; static int z; main() { int a,b,c; fun1(); fun2(); fun1.c fun2.c fun1(int x) { int y; static fun2(int x) { int z; return 1; } return 2; } } 2015/10/1 プログラミング方法論 [email protected] 8
© Copyright 2024 ExpyDoc