C言語 #8: 定数(Constants)

独習C

定数は、プログラムの実行中に値が変更されない変数の一種です。C言語では、定数を使用して固定された値を表現し、プログラムの可読性と保守性を向上させます。ここでは、C言語の定数について詳しく説明します。

1.定数の種類

C言語にはいくつかの種類の定数があります。これらの定数は、リテラル定数、シンボリック定数、および列挙定数として分類されます。

1.1.リテラル定数

リテラル定数は、ソースコードに直接記述された値です。以下に、いくつかのリテラル定数の例を示します。

  • 整数定数: 123
  • 浮動小数点定数: 3.14
  • 文字定数: 'A'
  • 文字列定数: "Hello, World!"
#include <stdio.h>

int main() {
    int num = 123;
    float pi = 3.14f;
    char letter = 'A';
    char greeting[] = "Hello, World!";
    
    printf("整数定数: %d\n", num);
    printf("浮動小数点定数: %f\n", pi);
    printf("文字定数: %c\n", letter);
    printf("文字列定数: %s\n", greeting);

    return 0;
}

1.2.シンボリック定数

シンボリック定数は、#defineプリプロセッサディレクティブを使用して定義される定数です。これにより、特定の名前に固定された値を割り当てることができます。

#include <stdio.h>

#define PI 3.14159
#define MAX_LENGTH 100

int main() {
    printf("円周率: %f\n", PI);
    printf("最大長さ: %d\n", MAX_LENGTH);

    return 0;
}

1.3.const修飾子を使用した定数

const修飾子を使用して、変数を定数として宣言することもできます。これにより、その変数の値を変更できなくなります。

#include <stdio.h>

int main() {
    const int NUM = 10;
    const float PI = 3.14f;
    
    printf("定数NUM: %d\n", NUM);
    printf("定数PI: %f\n", PI);

    // NUM = 20; // エラー: 定数の値を変更しようとしたため
    // PI = 3.14159f; // エラー: 定数の値を変更しようとしたため

    return 0;
}

1.4.列挙定数

列挙定数は、enumキーワードを使用して定義される一連の整数定数です。列挙定数は、関連する名前付き定数の集合を定義するのに便利です。

#include <stdio.h>

enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
};

int main() {
    enum Day today = WEDNESDAY;
    
    printf("今日の日付番号: %d\n", today); // WEDNESDAYは2番目の列挙定数なので、2が出力される

    return 0;
}

2.定数の使用例

定数は、プログラム実行中にその値を変更できない変数です。C言語では、定数を使用して固定の値を表現し、コードの可読性と保守性を向上させることができます。ここでは、C言語の定数の使用例について詳しく説明します。

2.1. #defineディレクティブを使用した定数

#defineディレクティブを使用して定数を定義できます。これは、コンパイル時に置換されるプリプロセッサディレクティブです。

使用例

#include <stdio.h>

#define PI 3.14159

int main() {
    double radius, area;
    printf("半径を入力してください: ");
    scanf("%lf", &radius);
    area = PI * radius * radius;
    printf("円の面積: %.2lf\n", area);
    return 0;
}

出力:

半径を入力してください: 5
円の面積: 78.54

2.2. constキーワードを使用した定数

constキーワードを使用して定数を宣言できます。これにより、変数の値を変更できなくなります。

使用例

#include <stdio.h>

int main() {
    const double PI = 3.14159;
    double radius, area;
    printf("半径を入力してください: ");
    scanf("%lf", &radius);
    area = PI * radius * radius;
    printf("円の面積: %.2lf\n", area);
    return 0;
}

出力:

半径を入力してください: 5
円の面積: 78.54

2.3.列挙型を使用した定数

列挙型(enum)を使用して、関連する定数のグループを定義できます。これにより、コードの可読性が向上します。

使用例

#include <stdio.h>

enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
};

int main() {
    enum Day today;
    today = WEDNESDAY;

    if (today == WEDNESDAY) {
        printf("今日は水曜日です。\n");
    }

    return 0;
}

出力:

今日は水曜日です。

2.4.関数内での定数の使用

関数内でも定数を使用することができます。これにより、特定の関数内でのみ有効な定数を定義できます。

使用例

#include <stdio.h>

void calculateCircleArea() {
    const double PI = 3.14159;
    double radius, area;
    printf("半径を入力してください: ");
    scanf("%lf", &radius);
    area = PI * radius * radius;
    printf("円の面積: %.2lf\n", area);
}

int main() {
    calculateCircleArea();
    return 0;
}

出力:

半径を入力してください: 5
円の面積: 78.54

2.5.定数配列

定数配列を使用して、変更できない配列を定義することができます。

使用例

#include <stdio.h>

int main() {
    const int numbers[] = {1, 2, 3, 4, 5};
    int i;
    for (i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }
    return 0;
}

出力:

numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5

定数の利点

  • コードの可読性が向上する
  • 値の変更を防ぐことでバグを防止できる
  • 定数の名前を使用することで意味が明確になる

総合例

以下に、ここまで学んだ定数の知識を統合したプログラムを示します。このプログラムでは、#defineconstenumを使用しています。

#include <stdio.h>

#define PI 3.14159

enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
};

void printDay(enum Day day) {
    switch (day) {
        case SUNDAY:
            printf("日曜日\n");
            break;
        case MONDAY:
            printf("月曜日\n");
            break;
        case TUESDAY:
            printf("火曜日\n");
            break;
        case WEDNESDAY:
            printf("水曜日\n");
            break;
        case THURSDAY:
            printf("木曜日\n");
            break;
        case FRIDAY:
            printf("金曜日\n");
            break;
        case SATURDAY:
            printf("土曜日\n");
            break;
    }
}

int main() {
    const double radius = 5.0;
    double area = PI * radius * radius;
    printf("半径%.2fの円の面積: %.2f\n", radius, area);

    enum Day today = FRIDAY;
    printf("今日は: ");
    printDay(today);

    return 0;
}

出力:

半径5.00の円の面積: 78.54
今日は: 金曜日

結論

定数は、プログラム内で固定の値を使用するために非常に便利です。#defineconst、およびenumを適切に使用することで、コードの可読性と保守性を向上させることができます。これらの知識を活用して、より効果的なプログラムを作成しましょう。

購読
通知
0 Comments
Inline Feedbacks
View all comments