constとは?C言語で値を変更させないためのキーワード【staticとの違いも解説】

目次

C言語文法解説シリーズ

本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説します。

👉 C言語文法解説シリーズ一覧はこちら

C言語の const は、値を変更できないことを示すキーワードです。

変数に const を付けることで、その値は書き換え不可になります。

const int value = 10;
value = 20;   // エラー

このように、const を付けた変数は代入できません。

でも const の役割はそれだけではありません。

  • 誤った書き換え防止
  • 設計意図の明確化
  • 関数の安全性向上
  • ROM配置(組み込み)

など、実務でも非常に重要な意味を持ちます。

この記事では const の意味と使い方を、
設計視点も含めて解説します。


constとは?

const は「この値は変更しない」ことを示します。

const int a = 10;

この場合

  • a は読み取り可能
  • a は書き換え不可

になります。

a = 20;   // コンパイルエラー
初心者さん

これは定数ってこと?
define と同じですか?

エンジニアくん

似てるけど違うよ。const は変数なんだ

const と #define の違い

#define は「文字の置き換え」です。

#define SIZE 10

int array[SIZE];

これはコンパイル前にこう変換されます。

int array[10];

つまり SIZE という変数は存在せず、
単に文字が置き換えられているだけです。

一方 const の場合

const int size = 10;
int array[size];

こちらは

  • size という変数が存在する
  • 型がある
  • デバッガで確認できる

という違いがあります。

比較すると

項目constdefine
あるない
変数存在する存在しない
デバッグできるできない
スコープあるない
メモリ使う使わない

基本的には const を使う方が安全です。


なぜ const を使うのか

const は「誤った変更を防ぐ」ために使います。

例えば

int max = 100;

この場合、どこからでも変更できてしまいます。

max = 0;   // 誤って変更

でも const を付けると

const int max = 100;

書き換えが禁止されます。

これにより

  • バグ防止
  • 設計意図の明確化
  • 安全性向上

という効果があります。


constとポインタ(重要)

const はポインタと組み合わせると意味が変わります。

値を変更できない

const int *p;

これは

「pが指す値を変更できない」

*p = 10;   // NG

でもポインタは変更可能

p = &a;    // OK

ポインタ自体を変更できない

int * const p;

これは

「pの指す先を変更できない」

p = &a;   // NG

でも値は変更可能

*p = 10;  // OK

両方変更不可

const int * const p;

これは

  • 値変更不可
  • アドレス変更不可

になります。

関数引数に const を付ける意味

const は関数引数でよく使われます。

例えば

void print(int *data)

この関数は

  • data を変更するか不明
  • 呼び出し側が不安

になります。

でも const を付けると

void print(const int *data)

この関数は

「data を変更しない」

ことが保証されます。

初心者さん

呼び出す側が安心できますね

エンジニアくん

あと、誤って書き換えるバグも防げる


constは組み込み開発で重要

const は組み込みでは特に重要です。

const char message[] = "hello";

このようなデータは変更しないため、
ROMに配置される場合があります。

つまり

  • RAM使用量削減
  • メモリ節約

につながります。

エンジニアくん

組み込みでは const を付けるかで配置が変わるんだ

初心者さん

かなり重要ですね

メモリ領域についてはこちらの記事で解説しています。


constとstaticの違い

よく混同されますが意味は全く違います。

キーワード意味
const変更不可
static寿命固定 / 公開範囲制限

static const int table_size = 16;

これは

  • const → 値変更不可
  • static → 外部非公開

両方の意味になります。

staticについてはこちらの記事で解説しています。


constはどこで使う?

よく使う場所

① 設定値
② テーブルデータ
③ 文字列
④ 関数引数
⑤ 読み取り専用データ

const uint8_t table[8] = {
    1,2,3,4,5,6,7,8
};

まとめ

const は

  • 値を変更不可にする
  • 誤変更防止
  • 設計意図の明確化
  • 関数の安全性向上
  • ROM配置(組み込み)

という役割を持つ重要なキーワードです。

static と同じく、
実務では必須レベルの文法です。

この記事が参考になった方へ

C言語の基本文法を一覧で整理しています。

👉 C言語文法解説シリーズ一覧はこちら

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする


目次