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

現在、C言語でマイクロマウスの開発をしているプログラミング初心者(@morikentiger)が、プログラミングの作法(とくに変数の扱い)について教えを請う。構造化プログラミング、変数のスコープ(有効範囲)や記憶域期間(staticだと永久に保持されるなど)について。
8
前へ 1 ・・ 4 5
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@zaklab ああそうでした。「コンパイラを利用する」において、「型がある」というのは、エラーによって、バグを抑止する役割があったわけですね。defineにはないですね・・・。

2014-10-27 00:21:44
吉日 @k2g2_ishikawa

@zaklab @morikentiger PGの話題になってるからオイラの流儀を参考までに。①変数関数定数などの命名規約を決める②見て何の変数だか判る名前にする③変数名は重複させない④変数は単純なカウンタ用を除き使い回さない⑤マジックナンバーは使わない⑥暗黙の型変換を避ける

2014-10-27 00:28:13
吉日 @k2g2_ishikawa

@zaklab @morikentiger あとコメントを多く記述しておくことも大事。自分で書いたプログラムでも3ヶ月後には他人のプログラムのようにわけわからんものになってるものです。処理の解析にはコメントが頼りです。

2014-10-27 00:38:56
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@zaklab 考えなおしてみたら、走行中に思考ルーチンが挟まってますね・・・。区間ごとに直進しようと旋回しようと、区間の切れ目で考えているので、その分だけ、走行ルーチンが放置されていますね・・・。若干距離が合わないのは、そのせいかもしれないです。まいったな・・・。

2014-10-27 00:44:39
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@zaklab @witch_kazumin @k2g2_ishikawa 「仮の定義」、宣言しただけで、初期化してないはずの変数が、勝手に初期化されているという現象ですね。

2014-10-27 00:46:13
吉日 @k2g2_ishikawa

@zaklab @morikentiger とにかく読みやすいプログラムを書くことが大事。コメントの書き方にもコツがあって、「○○に5を設定」みたいなソースを見れば判るものではなく、○○に5を設定してるのは何の為かをコメントに残すのです

2014-10-27 00:46:43
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@zaklab @witch_kazumin @k2g2_ishikawa グローバル変数には、1.何もつけない、2.staticをつける(ファイル外参照不可)、3.exturnをつける(ファイル外参照可能)、の3つがあると…。「何も付けない」のは、何者なんでしょうか?

2014-10-27 00:51:01
Zak@Chiba @zaklab

@morikentiger それ、一度紙に時系列で書き出してみ(^_^;)。それから考え直した方がええで。対策はあるけどね。

2014-10-27 00:56:32
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@k2g2_ishikawa @zaklab PG=Programing? ①~⑤までは理解しました。⑥の暗黙の型変換ですが、どういったことに気をつけてるのでしょうか?define defSpeed 150.0 も暗黙の型変換ですかね…。150.0だったり150だったり しますし

2014-10-27 00:56:58
Zak@Chiba @zaklab

@morikentiger @witch_kazumin @k2g2_ishikawa いや、勝手に「存在する」ことになってるんだよ。で、他所に定義したグローバル変数に同じ名前があった場合、グローバル変数として扱われてしまうワケだな。

2014-10-27 00:58:20
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@k2g2_ishikawa @zaklab 確かに、読み直してわからなかったことが何度か・・・。コメントは大事ですね。理由や意図が明記されていればあとで見て「なんでこんなこと書いたんだろう」ということが、わかりますね。

2014-10-27 00:59:27
吉日 @k2g2_ishikawa

@morikentiger @zaklab @witch_kazumin オイラのCの知識はかなり古いぞと前置きして、extern はその定義が他のファイルにあるもの、static は呼び出しの度に値が保持される宣言で、無印は価が保持されない定義

2014-10-27 00:59:44
Zak@Chiba @zaklab

@morikentiger @witch_kazumin @k2g2_ishikawa なにも付けないのはextern扱いの実体の定義ですね。

2014-10-27 01:01:16
Zak@Chiba @zaklab

@k2g2_ishikawa @morikentiger @witch_kazumin あー、今はそれビミョーにチャイます(^_^;)。無印は定義する場所でグローバル変数の実体になったり、ローカル変数の実体になったりします。

2014-10-27 01:02:55
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

@zaklab そうですね・・・。どんな対策ですか?考えたのは、思考ルーチンに入るフラグだけ立て処理せず、フラグONで割り込み関数内の思考ルーチンを回すというのを考えたんですけど、割り込み1msなんで間に合わないですね・・・。うーむ・・・。逆に、走行を割込で処理すればいいのかも!

2014-10-27 01:07:57
魔女みならい @witch_kazumin

@zaklab @k2g2_ishikawa @morikentiger このあたりが正しいように思う > C言語のstatic指定子について c-lang.org/static.html / 関数や変数のメモリ配置 www1.cts.ne.jp/~clab/hsample/…

2014-10-27 01:09:58
Zak@Chiba @zaklab

@morikentiger 解ってるやん。そう、走行関係を全部割込で処理するんですよ。センサーの検出もひっくるめて走行フィードバック系は全て割込の上で動作させるのだわ。区間移動したコトをフラグで知らせて、メインの思考ルーチンが動き出せばオケ。でも、それ実装するには整理が…ね(笑)

2014-10-27 01:11:51
吉日 @k2g2_ishikawa

@morikentiger @zaklab define定義の部分ではなくて、それを使う部分で注意が必要です。分かりやすく言うと100と"100"は違うということ。暗黙の型変換が厄介なのは、こちらが数字で使いたいのに勝手に文字で代入する点です。これが大小比較などで違う動きになる

2014-10-27 01:13:21
Zak@Chiba @zaklab

@witch_kazumin @k2g2_ishikawa @morikentiger うん、ヲイラもこういう認識っすねぃ。

2014-10-27 01:14:00
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

もうこんな時間か・・・。明日リプの続き返そう。

2014-10-27 01:59:01
黒白虎もりけん☆楽しんだもの=「価値」 @morikentiger

「有効範囲と記憶域期間」というタイトルだし、章の最後にあるし、かなり大事なことなはずなのに、読み飛ばされそう・・・。

2014-10-27 03:26:05
前へ 1 ・・ 4 5