
【C言語】極度のめんどくさがりがプログラムの設計についての教えを請う【プログラミング作法・構造化プログラミング】
-
morikentiger
- 15797
- 1
- 49
- 5
プログラムの設計について

極度のめんどくさがりだから、プログラムはなるべく書き直したくないし、バグにはウンザリ(というほどやってないけど)…。そこで、根本的にプログラムの設計をどうやったら「書き直しを抑えられるか、そもそもこの考えじゃダメじゃね?にならないか」を知りたい。
2014-10-26 13:18:01
@k2g2_ishikawa プログラムの流れを書いて整理するんです!変数やフラグの管理(更新タイミング,引数orグローバルにするなど)はどうされていますか?
2014-10-26 14:24:19そもそも、なぜこのまとめができたのか

区間走る関数の中に加減速関数をいれると、最低速のまま加減速しないという謎のバグは、プロトタイプ宣言をすることによって解消された・・・。だが、なぜ、プロトタイプ宣言しなくても動く関数もあるのに、プロトタイプ宣言しないと動くのに正しい挙動ではなくなるのか・・・。
2014-10-04 14:30:55二輪ロボットの加減速が上手くいかず数ヶ月・・・

しかも、最初超新地旋回するまでの直進加減速はちゃんと距離があう。なのに、旋回後、挙動がおかしくなる。うなりを上げてるから、速度が波打ってるんだろうと思うんだけど・・・。
2014-10-07 02:18:59
やっと左手でゴールした…。距離がおかしかった原因は、直進時に角速度も加減速しててスラロームになっていたことだった。
2014-10-07 05:01:48
なお、ゴール座標の周りを1で埋めて終了する模様orz それに加えて、シリアル通信が無限ループしてんのおわんないし(実は無限ループに見せかけて・・・。いや、マップのY座標がマイナス(というか255にアンダーフロー・・・)座標表示はおかしいっしょ・・・。
2014-10-09 03:06:48
スタートに戻れないのは、謎の歩数2の壁が存在するからだった。なんなんだー。今朝はこのバグをどうにかしよう。 pic.twitter.com/bBCk8Rlf18
2014-10-15 07:01:55

最初に見るのが(1,0)ゴールじゃん…。横着して直接(0,0)指定するから… START_X,Yとかdefineすりゃよかったのか
2014-10-15 07:48:37
min_speedという速度下限を設けていたが角度と分けてmin_ang_speedという変数を追加して、重心速度と角速度を分けたはずなんだけど、実際は、重心速度と角速度を合成して、左右のモーターの速度に変換する際に、速度下限を設けていて、そのせいで上手く行かなくなっていた
2014-10-18 11:13:05話は戻って、C言語でのプログラムにおける変数のスコープ(有効範囲)について

@morikentiger 変数はグローバルにすると、どこからも参照、更新可能になり思いがけないバグの温床になるので、呼び出し先が必要とする値だけを引数で渡すようにしています。渡す引数が多いときは構造体化して渡すとかしてます。
2014-10-26 15:05:07
@k2g2_ishikawa グローバルはバグの温床か・・・。極力減らす方向で設計しようと思います。そういえば割り込み関数に渡す場合は、グローバルじゃないといけませんよね・・・。1ms毎に割り込みで物理計算する変数はグローバルじゃないといけない?割り込みの使い方間違ってますか?
2014-10-26 19:10:20
@morikentiger @k2g2_ishikawa まず、ヲイラがやってる工夫の一つ「グローバル変数は変数名自体がグローバルであるコトが解るように命名する」を実践してみるヨロシ(^_^;)。これだけでも、思わぬ場所で誤ってグローバル変数をイジってしまってるのが解ったりする。
2014-10-26 19:17:06
@morikentiger 何がなんでもローカル変数という考え方はプログラムを読みにくくします。必要最小限(自分が把握、管理できる範囲)なグローバルはアリです。グローバル変数を更新するカ所を絞れる組み方をしてればバグも発見が早いです
2014-10-26 19:18:49
@morikentiger @k2g2_ishikawa 次に、スコープを上手に切ってコンパイラを有効活用すべし。ローカルで済む物は全てローカルに。static変数や関数を有効利用。ファイルも分割してファイル内オンリーな変数とか使って、システム全体に渡るグローバル変数を極力削減。
2014-10-26 19:19:25