RISTイブニングスクール (応用編:第3日C)

分割コンパイルとスコーピング
数理情報システム工学科
担当: 汐月哲夫
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