http://www.sw.it.aoyama.ac.jp/2014/CP1/lecture7.html
© 2005-14 Martin J. Dürst 青山学院大学
typedef struct { double x1, x2, y1, y2; } Point;
typedef struct { double x, y; } Point;
typedef struct { double real, immaginary; } Complex;
(引数でも戻り値でも構造体が使用可能)
関数の宣言:
Complex add(Complex a, Complex b);
関数の定義:
Complex add(Complex a, Complex b) { Complex result; /* a と b の実部と虚部から result の実部と虚部を計算 */ return result; }
(preprocessor)
gcc -E 06A1.c -o 06A1.i
→
06A1.i
#include
)#define
)#ifdef
/#ifndef
/#endif
)(header file)
.h
.c
ファイルへ包含しながらコンパイルlibrary.h
:
ライブラリが提供する方の定義、関数の宣言library.c
: ライブラリの関数などの定義
(library.h
を #include
)using.c
: ライブラリを使用するプログラム
(library.h
を #include
)#include
の種類#include
(教科書 p. 201):#include <stdio.h>
#include
:#include "my_library.h"
(教科書 pp. 218, 237)
#define COUNT 20
for (i=0; i<COUNT; i++)
#define max(a,b) ((a)>(b)?(a):(b))
int f = max(d,e); double z = max(x,y);
char c = max(getchar(), 'n');
)gcc -DCOUNT=20 ...
#ifdef HOGE
// HOGE が #define で定義されたら残る部分
#endif
#ifndef HOGE
// HOGE が #define
で定義されなかったら残る部分
#endif
同一ヘッダファイルの #include
の重複防止:
ヘッダファイルにて:
#define MY_LIBRARY_HEADER
使用場所:
#ifndef MY_LIBRARY_HEADER #include "my_library.h" #endif
#ifndef
, #define
)(問題ごとにテスト用のファイル、コンパイル用のファイルがダウンロード可能)