<C言語入門/車載ソフト> typedef
こんにちは、レオハルです。
車載ソフトで利用するC言語入門シリーズ「typedef」です。
※通常のC言語解説とは、異なり組込み・車載ソフトに特化した記載があります。ご注意ください。
typedefとは
C言語では、既存の型名に対して、新しく別の好きな型名をつけることができます。
「unsigned char」を「符号なし1バイト」ということで、新しく「u1」という型名に変更するといったことができます。また、構造体や共用体の定義を行う際にも、typedefを使って、構造体の型を宣言しておくことができます。
利用方法
ソースコードには、次のように記載します。
typedef 既存型名 新しい型名 ;
具体例を下記に記載します。
/* 型定義 */ typedef unsigned char u1 ; typedef unsigned short u2 ; typedef unsigned long u4 ; typedef char s1 ; typedef short s2 ; typedef long s4 ; typedef float f4 ; typedef double f8 ;
/* 変数定義 */
u1 u1g_data_X ;
u2 u2g_data_Y ;
s4 s4g_data_Z ;
static s1 s1s_data_A ;
static s2 s2s_data_B ;
static u4 u4s_data_C ;
ここでの例では、「符号有無」と「データ長」を直感的に分かりやすい表記になるよう置き換えてみました。tyepdeされた型を利用することでシンプルになると思います。
さらに変数名も工夫すると、より直感的になるでしょう。
※上記はあくまで例です。ローカルルールにより変わります。ビット数で表記する場合など色々パターンがあるので、自分のプロジェクトに合わせたものを利用しましょう。
ko
必要性
typedefを行うことで生まれる大きなメリットが2つあります。
- 可読性
先ほど挙げた具体例でも、お分かり頂けたと思いますが、データ型を直感的に意味の分かる名称にしておくことで、他のプログラマが見たときに伝わりやすくなります。 - 移植性
組込み系の場合、マイコン、コンパイラの処理系に依存して、C言語の既存型の有効範囲が分かることがあります。MISRA Cのルールの中でも、typedefした型を利用することが規定されています。typedefした型を利用しておけば、ソフトを移植する際に修正する箇所が、typedef宣言の部分に限定することができます。
組込みソフトの場合、移植性・可読性を考慮し、独自定義した型で記載されたソースコードになっていることが多いと考えられます。初めて見たソースコードで「なにこの型?」となった時には、typedefされている箇所を探し、どんな型になっているのか探してみましょう。
私の記載するソースコードも今後は、typedefした型で書いていきたいと思います。
C言語学習におススメの書籍
【C言語/プログラミング初心者の方】
【入門卒業レベルの方】
【組込み向け】