3Dプリント

誰も教えてくれない「組込みC言語」 2

組込みプログラムではバグを早期に発見できるように
変数名はサイズが分かるように命名します。

例えば

1
2
3
4
5
6
7
8
9
10
11
void main(void){
	unsigned char	i;
 
	while (1U)
	{
		P3.0 = 0;
		for(i=0;i<50000;i++){};
		P3.0 = 1;
		for(i=0;i<50000;i++){};
	}
}

このプログラムにはバグが有ります。
iは符号なし8bitの変数(0 ~ 255)ですが
その範囲を超えた 50000 と比較しています。
このサンプルの場合は宣言部と比較している箇所が近いために気付きやすいのですが
変数がグローバル変数で別のファイルに定義されている場合はちょっと見気付きません。

これをちょっと見でもバグだと気付くように変数名を変えてみましょう。

1
2
3
4
5
6
7
8
9
10
11
void main(void){
	unsigned char	u1_i;
 
	while (1U)
	{
		P3.0 = 0;
		for(u1_i=0;u1_i<50000;u1_i++){};
		P3.0 = 1;
		for(u1_i=0;u1_i<50000;u1_i++){};
	}
}

変数名を i から u1_i に変えました。
もうお気づきかと思いますが u1_i の u1 は この変数が符号なしの1バイトの変数を意味しています。

このように変数名に型を表すワードを明示しておけば、
u1_i<50000 この部分を見ただけで 変数が符号なしの1バイトの変数 と 1バイトの範囲を超えた値と比較しているのが一目瞭然となります。u1 s1 u2 s2 s4 f4 f8 を変数の接頭語として良く使用します。 意味は以下のようになります。 u1 符号なし1バイト s1 符号あり1バイト u2 符号なし2バイト s2 符号あり2バイト u4 符号なし4バイト s4 符号あり4バイト f4  単精度実数 f8  倍精度実数


「誰も教えてくれない「組込みC言語」 2」への2件のフィードバック

    1. これはローカルルールなので色々な書き方が在ると思います。
      ちなみに自分が現在携わっている業界はバイト表記が多いようにおもいます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です