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 20for (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)(問題ごとにテスト用のファイル、コンパイル用のファイルがダウンロード可能)