地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【C言語】defineって


title: C言語における#defineの基本 -tags: C 演算子 備忘録 +tags: C プリプロセッサ マクロ 備忘録 author: hanahagewanko

slide: false

#defineとは

  • C言語の中で使われる、コードを変換するディレクティブ
  • 定数や算出式に名前を付けることで、コードを分かりやすくするための命令

:::note info C言語のプリプロセス命令とは何か コンパイル前の「上出し不可」のテクニックのようなもので、ソースコードに置いたして、コンパイラ機械語へ変換する際にはすでに変換された形になっています。

プリプロセス命令の例: - #include: 外部ファイルを参照 - #define: 定数やマクロの定義 - #ifdef/#ifndef: 条件付きコンパイル - #pragma: コンパイラへの特別指示 - #error: コンパイル時にエラーを出す - #undef: 定義を取り消す :::

#defineの利点

  • 数字や算出式に名前を付けることで、誰が見ても理解しやすいコードを作成できる
    • 例えば、円周率をただの3.14とする代わりに、PIとして定義すれば、それを使うたびに円周率を意識してると分かりやすくなります

#defineの基本使用例

#include <stdio.h>

// 定数定義
#define PI 3.14159265359
#define MAX_USERS 50

// マクロ定義
#define DOUBLE(x) ((x) * 2)
#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main() {
    // 定数利用
    double circumference = PI * DOUBLE(5);  // 円周の計算
    int max_value = MAX(42, 77);  // 最大値の計算

    printf("Circumference: %f\n", circumference);
    printf("Max Value: %d\n", max_value);

    return 0;
}

この例では、定数や算出式を名前を付けて定義しています。

  • #define PI 3.14159265359
    • PIとして円周率を定義し、計算に利用
  • #define MAX_USERS 50
    • MAX_USERSとして最大ユーザ数を定義
  • #define DOUBLE(x) ((x) * 2)
    • DOUBLEとして二倍値を計算するマクロを定義
  • #define MAX(a, b) ((a) > (b) ? (a) : (b))
    • MAXとして二つの値のうち大きい方を返すマクロを定義

#defineを使うことで、コードの自明性を高めるだけでなく、後の変更も簡単になります。