型エイリアスのための typedef の使用
CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 58/63。
C言語のプログラミングでは、既存のデータ型名が冗長すぎたり、プログラムの意図を明確に表現していなかったりする状況に遭遇することがあります。typedefキーワードは、既存のデータ型に対して新しい名前を作成できるようにすることで、解決策を提供します。
typedef は、データ型のエイリアス(別名)やニックネームを作成するものだと考えてください。基本的な構文は単純です:
typedef existing_type new_name;例えば、intデータ型に対して、より説明的な名前を作成することができます:
typedef int Integer;この宣言の後、通常 int を使用する場所ならどこでも Integer を使用できます。int count = 5; と Integer count = 5; の両方は、まったく同じことを実現しますが、2番目のバージョンの方が特定の文脈ではより意味があるかもしれません。
この機能は、複雑なデータ型を扱う際や、コードをより自己文書化し、メンテナンスしやすくしたい場合に、特に価値を発揮します。
チャレンジ
簡単温度監視システムのために、typedef を使用して意味のある型エイリアスを作成する方法を示す C プログラムを作成してください。プログラムは以下の要件を満たす必要があります:
typedefを使用して、以下の型エイリアスを作成します:floatに対してTemperatureという型エイリアスを作成するintに対してSensorIDという型エイリアスを作成するintに対してStatusという型エイリアスを作成する
- main 関数内で:
SensorID型の変数sensorを宣言するTemperature型の変数currentTempを宣言するTemperature型の変数thresholdを宣言するStatus型の変数alertStatusを宣言する- 入力から、センサーID、現在の温度、しきい値温度、アラートステータスの順に 4 つの値を読み取る
- これらの入力値を対応する変数に代入する
- 以下の正確な形式でセンサー情報を出力する:
Sensor ID: [sensor_id]Current Temperature: [current_temp]Threshold: [threshold_temp]Alert Status: [alert_status]
- 温度分析を実行し、結果を出力する:
- 温度差(現在の温度からしきい値を引いたもの)を計算し、
Temperature型の変数differenceに格納する - 以下の正確な形式で差を出力する:
Temperature Difference: [difference] - 現在の温度に基づいて温度カテゴリを判定する:
- 温度が 0.0 未満の場合:
Category: Freezingと出力する - 温度が 0.0 以上 25.0 以下の場合:
Category: Normalと出力する - 温度が 25.0 を超える場合:
Category: Hotと出力する
- 温度が 0.0 未満の場合:
- アラートを発生させるべきかチェックする:
- 現在の温度がしきい値より大きく、かつアラートステータスが 1 の場合:
Alert: Temperature exceeded threshold!と出力する - それ以外の場合:
Alert: No alert triggeredと出力する
- 現在の温度がしきい値より大きく、かつアラートステータスが 1 の場合:
- 温度差(現在の温度からしきい値を引いたもの)を計算し、
このチャレンジでは、typedef を使用することで、コードがいかに自己文書化され、理解しやすくなるかを示します。プログラム全体で int や float のような汎用的な型を使用する代わりに、SensorID、Temperature、Status といった各変数の目的を明確に示す意味のある名前を使用します。このアプローチにより、コードの可読性が向上し、プログラムの保守や修正が容易になります。
自分で試してみよう
#include <stdio.h>
// TODO: ここでtypedefエイリアスを作成します
int main() {
// TODO: typedefエイリアスを使用して変数を宣言します
// 入力値を読み取ります
scanf("%d", &sensor);
scanf("%f", ¤tTemp);
scanf("%f", &threshold);
scanf("%d", &alertStatus);
// TODO: センサー情報を表示し、分析を行うためのコードを以下に記述してください
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理と制御フローのすべてのレッスン
10Enum と typedef
名前付き定数のための EnumEnum の宣言と使用switch 文での Enum の利用型エイリアスのための typedef の使用構造体での typedefまとめ:typedef と Enum の演習自分で練習してみよう: Cオンラインコンパイラ