不機嫌な技術 -16ページ目

不機嫌な技術

プロを脅かすアマチュアになりたい。

皆さま参加予定を決めているようなのでわたしも


Miceプチ大会 6/29 ○(マウスが動けば)
金沢  7/19 ✕
Pi:Co 山形 7/25  ×
台湾 9/20   ✕
北陸 9/23 ×(水曜だと絶対無理)
関西  9/27 ✕(参加したいが厳しい)
東日本 10/4 △(無理してでも参加する方針ではある)
東北 10/11 ○(参加したい)
九州 10/24 ×(遠い…)
中部 10/25 △(参加したい)
全日本 11/22  ○


かなりイマイチな参加予定です、すみません。

学会活動時期と被るんですよね、そのへんの順調さ次第なところが強いです…

あと、お仕事が下期大変忙しくなりそうなので、早めに動かすところまで行かないと
本当に参加もままならないかもしれません。
頑張ります。

大会に出るのも大事なんですけど、大会出るとガッツリ開発時間失うので
開発時間確保的な意味で行くのやめるかもしれませんが…。

月曜の深夜に何やってんだって感じですが、

CS+のお話。

main.c に加えて、test.c があるとき

test.c内で宣言されている関数をmain.c内でプロトタイプ宣言無しに呼ぶとどうなるか。

呼べます。エラー出ません。

今までこの仕組をあまり気にしてませんでしたが、

どうも、CS+では(RXのコンパイラでは?)、

「プロトタイプ宣言のない関数は関数型、引数ともにint型とみなす」

みたいなことが起きているようです。

つまり、多分ですが、float型なんかを使った関数は大抵おかしくなるんじゃないかと。

charとかshortとかビット長せまいものはどうなるんでしょう、ちょっとそこまで考えてません。


結論から言うと、プロトタイプ宣言しろよバカって話なんですが、いや、だって、

無くても通ったし、忘れたらあれだし、とかあると思うので設定探してみました。

CC-RXのビルドツールのプロパティで、コンパイラオプションのタブを開きます。

「インフォメーション、ウォ-ニングメッセージをエラーレベルに変更する」
を
「はい(エラー番号指定)」
にして、
「インフォメーション、ウォーニングレベルのエラー番号」
を
「23077」
にします。

下図参照。


こうすると、一番下に出ているようにプロトタイプ宣言がないとエラー出ます。

バッチリですね。多分。

これで、関数呼ぶと意図した動作をしない、とか、mainに書くと動くのに関数化すると動かない、
とか、そういうバグというかミスを減らすことができますね。

たぶんわたし、過去、なんどかこれにハマって、

「ハマり続けた結果、関数化を諦める」

ということをやっている気がします。 くそう。
今のマウスのプログラムは

C言語何ソレ、状態だった大学入りたてのあの頃から継ぎ足し継ぎ足し作ってきました。

リニューアルをあまりせずに使っているので、中身が大変なことになっています。

いくつかダメなポイントを紹介します。

①変数名がダメ。
 これはちょいちょい治す機会が合ったのでそこまでヒドくはないんですが、それでも
 "gyro"とか、"sen"みたいに分かりそうでわからない名前が多かったり、
 "battery"と"battery voltage"とか、"l_speed"と"l_speed_now"とかやらかしそうな変数が合ったり。

②命名規則がダメ。
 これは①と半分被りますが、大文字小文字入り乱れ、いろんな表記が。
 "R_SEN"という変数とか、"sensor_control_err_LIM"という定数とか合って駄目な感じ。

③スコープがダメ。
 staticをほぼ使っていません。

④ファイル構成がダメ
 .cファイルと.hファイルが大変自由に使われています。
 多重インクルードの対策もされていないし。

⑤サブルーチンの少なさ
 初級者あるあるかもしれませんが、関数が大変少ない。
 どでかいスイッチ文とか平気で作っています。③とも関連するかもしれません。


…と言う感じで、とにかくもうヒドイです。
ただ、最大の問題は特に困ってないと言うあたりです。
個人作業なマウサーが犯しがちな悪いところなんだと思いますが。
これらに起因するバグにハマった記憶はあまりありません。

ですが、ですが、流石に情報技術に携わる身ですし、ある程度のクオリティで
プログラムを書こうと思った次第です。

ですので、
-------------------------
基本はスネークケースで、
Global、Static、Pointerは接頭辞付き、
関数はモジュールごとにモジュール名を接頭辞に、
int型は禁止、
Signed / Unsignedの区別を明記、
モジュールごとにコメントヘッダを付ける、
-------------------------
ぐらいはルールとしてつけようと思いました。

関数化も面倒臭がらずにしていこうと思います。

プログラム書きなおすの面倒ですが、挫折しませんように。