Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

#include / #define

プリプロセッサ命令はコンパイルの前処理段階で実行されます。『#include』でヘッダファイルを読み込み、『#define』で定数を定義します。いずれも行頭に『#』を付けて記述し、セミコロンは不要です。

構文
// 標準ライブラリのヘッダを読み込みます。
#include <ヘッダファイル名.h>

// 独自のヘッダファイルを読み込みます。
#include "ヘッダファイル名.h"

// 定数マクロを定義します(末尾にセミコロンは不要です)。
#define マクロ名 値

// 定数の定義例です。
#define PI     3.14159265358979
#define MAX    100
#define APP_NAME "MyApp"
主な標準ヘッダファイル一覧
ヘッダ主な内容
<stdio.h>標準入出力関数(printf、scanf、fopen など)を提供します。
<stdlib.h>メモリ管理(malloc、free)、乱数(rand)、変換(atoi)などを提供します。
<string.h>文字列操作関数(strlen、strcpy、strcmp など)を提供します。
<math.h>数学関数(sqrt、sin、cos、pow など)を提供します。
<time.h>時刻・日付の取得・変換関数を提供します。
<ctype.h>文字分類関数(isdigit、isalpha、toupper など)を提供します。
<stdint.h>固定幅整数型(uint8_t、int32_t など)を提供します。
<stdbool.h>bool型・true・falseを提供します(C99以降)。
サンプルコード
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

// 定数マクロを定義します。
#define PI        3.14159265358979
#define MAX_SIZE  10
#define APP_NAME  "Circle Calculator"

// マクロは型がないことに注意します。
#define GRAVITY   9.8

int main(void) {
    printf("== %s ==\n", APP_NAME);

    // 定数として使用します。
    double radius = 5.0;
    double area   = PI * radius * radius;
    double circ   = 2.0 * PI * radius;
    printf("半径 %.1f の円\n", radius);
    printf("面積: %.4f\n", area); // 『78.5398』と出力されます。
    printf("円周: %.4f\n", circ); // 『31.4159』と出力されます。

    // MAX_SIZE を使って配列サイズを定義します。
    int arr[MAX_SIZE];
    for (int i = 0; i < MAX_SIZE; i++) {
        arr[i] = i * i;
    }
    printf("arr[5] = %d\n", arr[5]); // 『25』と出力されます。

    // math.h の sqrt を使います(リンク時に -lm が必要な場合があります)。
    printf("√2 = %.6f\n", sqrt(2.0)); // 『1.414214』と出力されます。

    // GRAVITY を使った落下距離の計算です。
    double t = 2.0; // 秒
    double distance = 0.5 * GRAVITY * t * t;
    printf("%.1f秒後の落下距離: %.1fm\n", t, distance); // 『19.6m』と出力されます。

    return 0;
}
概要

『#include <...>』はコンパイラの標準インクルードパスを検索し、『#include "..."』は現在のファイルのディレクトリを最初に検索します。自作ヘッダには二重引用符を使うのが一般的です。

『#define』で定義した定数マクロはプリプロセッサが単純なテキスト置換を行います。マクロには型がないためコンパイラの型チェックが受けられません。定数にはできるだけ『const』変数や『enum』を使い、型安全なコードを書くことを推奨します。

関数マクロ(引数を取るマクロ)については『#define(関数マクロ)』を、条件付きコンパイルについては『#ifdef / #ifndef』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。