-
Stylistic Considerations
スタイルの考慮
C言語用のコーディング標準を設定するのは本マニュアルの目的ではありませんが、HI-TECH Cのある特徴に関するコメントは有用かもしれません。
メンバ名
HI-TECH Cは1つ以上の構造体もしくは共用体で、同じ構造体もしくは共用体のメンバ名を許容しますが、他のCコンパイラでは許容されないかもしれません。コードの移植性を高めるためには、メンバ名は全て区別することをお勧めします。そして確実な方法はそれぞれのメンバ名に構造体由来の1文字か2文字のプレフィックスをつけることです。この例は図7.に挙げてあります。
struct tree_node { struct tree_node * t_left; struct tree_node * t_right; short t_operator; };
- Fig. 7. 図7. メンバ名の付け方
いくつかの構造体の中でネストメンバを参照する際にHI-TECH Cは全ての中間名の主張をする?ので、いくつかのシンプルなマクロ定義がショートハンドとして?渡すことができます。この例は図8に挙げてあります。
struct tree_node { short t_operator; union { struct tree_node * t_un_sub[2]; char * t_un_name; long t_un_val; } t_un; }; #define t_left t_un.t_un_sub[0] #define t_right t_un.t_un_sub[1] #define t_name t_un.t_un_name #define t_val t_un.t_un_val
- 図8.メンバ名ショートハンド
これは構造体の編集コンポーネントを、移植性を保障し、構造体の綺麗に定義しながらも、ショートネームで参照できるようにします。
INTの使用
SHORT型やLONG型に優先して、INT型をどこでも使うのは避けることをお勧めします。SHORTは16bit、LONGが32bitで実装されているのに対して、INTが可変サイズであるためです。
外部定義
あるコンパイラは 初期化しないグローバル変数が一ヶ所以上で定義されていても許可し、全ての定義が同じものであるとして複数定義がリンカで解決されます。
HI-TECH Cは明確にこれを禁止しています。というのはこれが微妙なバグを引き起こすかもしれないからです。その代わりにグローバル変数はあなたが好きなだけ外部定義として??定義でき、一対一での場所でのみ定義しなくてはいけません??
グローバル変数はヘッダで外部変数として定義する、またファイル内においては変数に紐付けられるよう最も近くでどの変数も定義することを、典型的には意味します。
この使用方法はバーチャルに他の全てのC言語の実装で移植可能性があります。