Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C・C++で変数を定数として宣言する3つの方法|const・enum・マクロの違いを解説

CおよびC++には、変数を定数として宣言する方法がいくつかあります。それぞれの方法を詳しく見る前に、まず「定数とは何か」を確認しておきましょう。

定数とは?

定数とは、値が変更できないものを指します。プログラミングの観点で言えば、定数とは変数に代入された固定値であり、プログラムの実行中に他の変数やコンポーネントによって書き換えられることはありません。定数は任意のデータ型を持つことができ、プログラム内で不変の要素を定義するために使用されます。例えば、円周率(Pi)は3.14という固定の浮動小数点値を持つため、定数として宣言するのに適した代表例です。

変数を定数として宣言する主な方法

1. constキーワードを使う

constキーワードは、変数を定数にする最も一般的な方法です。constとして宣言された変数の値をプログラムが変更しようとすると、コンパイラがエラーメッセージを出力します。

サンプルコード:

#include<stdio.h>
int main(){
    const int value = 5;
    printf("value of constant variable is : %d ",value);
    //定数変数の値を変更しようとする
    value = 8;
    return 0;
}

実行結果:

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Users\dell\OneDrive\Documents\test.c||In function 'main':|
C:\Users\dell\OneDrive\Documents\test.c|7|error: assignment of read-only
variable 'value'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

このように、読み取り専用(read-only)の変数に代入しようとしたため、コンパイルエラーが発生します。これにより、誤って定数の値を書き換えるバグをコンパイル段階で防ぐことができます。

2. 列挙型(enum)を作成する

enum(列挙型)も、一連の定数値を作成するために使われます。enumはユーザー定義のデータ型で、CやC++を含む多くのプログラミング言語で利用できます。例えば、曜日のように固定値の集合を持つデータは、enumとして定義するのに適しています。

サンプルコード:

#include<stdio.h>
enum months{Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
int main(){
    int i;
    printf("values are : ");
    for (i=Jan; i<=Dec; i++)
        printf("%d ", i);
    return 0;
}

実行結果:

values are : 0 1 2 3 4 5 6 7 8 9 10 11

enumの各メンバーには、明示的に指定しない限り、先頭から順に0、1、2…という整数値が自動的に割り当てられます。関連する定数をひとまとめに管理できるのが大きな利点です。

3. マクロを使う

マクロはプリプロセッサディレクティブの一種で、「#define」を使って作成します。マクロには名前付きのコード断片が含まれており、コンパイラ(正確にはプリプロセッサ)がコード内でマクロ名を見つけると、それを対応するコードに置き換えます。そのため、マクロは一種の定数値として機能します。

サンプルコード(マクロの値を変更しようとした場合):

#include<iostream>
using namespace std;
#define val 10
int main(){
    val++; //定数の値は変更できない
    return 0 ;
}

実行結果:

Main.cpp:6:8: error: expression is not assignable

サンプルコード(マクロを通常どおり使用した場合):

#include<iostream>
using namespace std;
#define val 10
int main(){
    int product = 1;
    cout<<"Value of Macro val is : "<<val;
    for(int i=0;i<val;i++){
        product=product*val;
    }
    cout<<"\nProduct is: "<<product;
    cout<<"\nValue of Macro val after modifying it is : "<<val;
    return 0 ;
}

実行結果:

Value of Macro val is : 10
Product is: 1410065408
Value of Macro val after modifying it is : 10

この例では、マクロ「val」は10という固定値として扱われ、ループ処理などで繰り返し利用されても値が変わることはありません。

まとめ:3つの方法の使い分け

C/C++で定数を扱う方法は、主に以下の3つがあります。

  • const:型情報を持ち、コンパイラによる型チェックが働くため、最も安全で推奨される方法。
  • enum:関連する整数定数をグループ化して管理したい場合に便利。
  • #defineマクロ:プリプロセス段階で単純なテキスト置換が行われるため、型チェックはないが柔軟に使える。

用途に応じてこれらを使い分けることで、より安全で可読性の高いコードを書くことができます。

  1. C++のポインタ演算子*とは?間接参照演算子の基礎と使い方を解説

    C++の2つのポインタ演算子C++には、ポインタを操作するための演算子として、アドレス演算子(&)と間接参照演算子(*)の2つが用意されています。ポインタとは、別の変数のアドレス(メモリ上の場所)を格納する変数のことです。つまり、他の変数のアドレスを保持している変数は、その変数を「指し示している(ポイントしている)」と表現されます。ポインタが指し示す対象は、オブジェクトや構造体、さらにはポインタ自身を含む、あらゆるデータ型が可能です。間接参照演算子(*)とは間接参照演算子(*)は、アドレス演算子(&)と対になる演算子です。単項演算子の一種で、オペランドに指定されたアドレスに格納

  2. C#で1つの変数と複数の変数の値を出力する方法

    C#で変数の値をコンソールに表示するには、Console.WriteLine()メソッドを使用します。この記事では、単一の変数を出力する基本的な方法から、複数の変数を一度に出力する方法まで、具体例を交えて解説します。 単一の変数を出力する C#で1つの変数の値を表示するだけなら、Console.WriteLine()を使うだけで実現できます。文字列と変数を「+」演算子で連結して出力するのが最もシンプルな方法です。 次の例では、変数「a」の値を1行で表示しています。 例 using System; using System.Linq; class Program {   &