月ノ書

【C言語】const と #define の違いとは?定数とマクロの考え方

今回の記事でわかること
  • const を使った定数の定義方法が分かる
  • #define を使ったマクロの基本と注意点が分かる
  • 定数とマクロをどう使い分けるべきか判断できるようになる

定数とは

プログラムの中で 値が変わらないことを保証したいもの を定数と呼びます
数学でいう円周率 π のように、計算の途中で変わってほしくない値を扱うための仕組みです

C言語では const キーワードを使って定数を定義します

#include <stdio.h>

int main(void) {
    const double PI = 3.14;

    printf("円周率は %f です\n", PI);
    return 0;
}

一度代入した値は変更できないため、うっかり書き換えてしまうミスを防ぐ 効果があります

定数を使うメリット

const を使うと、コードに次のような良い影響があります

例えば

const int MAX_SCORE = 60;

と書いておくと「この 60 は合格点なんだな」と一目で分かります

マクロとは

C言語には マクロ という仕組みもあります
マクロは、コンパイル前にコードを文字通り置き換える機能です

#define を使って定義します

#define PI 3.14
#define CIRCLE_AREA(r) (PI * (r) * (r))

これは関数ではなく、書かれた内容がそのまま展開される のが特徴です

#include <stdio.h>

#define PI 3.14
#define CIRCLE_AREA(r) (PI * (r) * (r))

int main(void) {
    double radius = 5;
    printf("半径 %.1f の円の面積は %f\n", radius, CIRCLE_AREA(radius));
    return 0;
}

マクロを使うメリットと注意点

マクロには便利な点もありますが、注意も必要です

メリット
注意点

そのため、
マクロはシンプルな用途に限定して使う のが安全です

定数とマクロの違い

項目const 定数#define マクロ
値の変更不可不可(置換後)
ありなし
型チェックされるされない
デバッグしやすいしにくい
主な用途定数値の管理簡単な置換や条件分岐

どちらを使うべきか

基本的な考え方はとてもシンプルです

最近のC言語では、安全性と可読性の面から const を使うのが主流 です

マクロは

といった限定的な場面で使われることが多くなっています

まとめ

定数とマクロはどちらも
「値を固定する」という目的は同じですが、仕組みはまったく異なります

まずは const を正しく使えるようになることが大切です
そのうえで、必要な場面だけマクロを使うようにすると、読みやすく安全なC言語プログラムが書けるようになります

学習進捗

0
Would love your thoughts, please comment.x