C言語だけでなく、プログラムを作成していくうえで、うまくいかないときが絶対にあると思います。
私は組み込みマイコンのプログラマーですので、組み込みマイコンでうまくいかないときの対応方法を紹介したいと思います。
机上でわからなければ、実際にプログラムを動作させてみる
「百聞は一見に如かず」です。考えてもわからなければ、実際に実行させて、動作させてみることです。これが現状を把握するのに、一番手っ取り早い方法です。
うまくいかない動作が必ず、再現するのであれば、どのタイミングで、どんな条件のときに、それが発生するのかわかるので、プログラム内の間違いを見つけることが容易だと思います。
厄介なのは、ほとんどうまくいっているのに、たまにうまくいかないときです。
コンソール付きのアプリなら、printf文を手当たり次第に入れて、変数の動きを見るということができますが、組み込みマイコンでは、それができないので、モニターする変数にアドレスを割り振って、その変数をモニターツールで見るという方法をとります。
これで、目星をつけた個所が正しければ、うまくいかない原因がつかめるでしょう。うまくいかなければ、さらにプログラムを追いかけて、怪しい箇所にモニター用変数を設置してツールでモニターするということを繰り返します。
モニターツールがないとか、プログラムにモニター機能がない場合は、作りましょう。通常、メンテナンスしなければなりませんので、モニターツールがないということはありません。
ということは、プログラム内にもモニターできる機能のプログラムが存在するわけです。
普段、そういう箇所を触ることはないでしょうから、それを利用して自分なりのメンテ機能を作ってしまうってことです。
原因がわかれば、修正ができますよね。修正したら、それで終わりじゃなく、もう一度、同じ動作をさせてみましょう。
その時、うまくいかなかった動作が改善されて、うまく動くことを必ず確認してくださいね。
もちろん、うまくいったら、モニター用の変数も消してくださいね。
自分だけじゃわからなければ、同僚に相談するのも一つの手です。他の人の目で見てもらうと、思わぬ間違いをしていること、間違った思い込みをしていたことなどを気づかせてくれるときあります。
したがって、大いに周りを巻き込みましょう。プログラマーは誰かに頼られると、うれしいものなので、助けてくれます。
うまくいっていたプログラムに戻してみる
それでも、うまくいかないときは、うまくいっていたときのプログラムに戻してみることです。自分が追加したプログラムというのは、わかるはずですので、少しずつ前に戻して、うまくいくかを試す。
あるいは、うまくいっていたベースにしたプログラムに少しずつ追加してから、うまくいくことを確認していく方法です。
作業量でどちらを取るかはケースバイケースですが、少しずつ戻していくほうが、私はいいと思います。
少しずつ戻すといっても、追加した処理をコメント文にして、処理を無効にしていくやり方を取るべきです。そうすると、再度、追加プログラムを書く手間が省けますね。
こういうメリットがあるので、少しずつ戻すようにしたほうがいいと思う理由です。
少しずつ戻すことで、どこかでうまくいくポイントが出てくるはずです。したがって、その寸前に戻した(コメント文にした)プログラムに問題があるということがわかりますね。
その部分を修正して、もう一度、プログラムに追加して動作確認をしてみましょう。
うまくいかなければ、どうしたらうまくいくかを考えて、プログラムを修正していきましょう。
先にも書きましたが、自分一人でないなら、周りの人に相談して解決していきましょう。
一旦、別の作業をする
これは、一種の気分転換です。ずっと、同じプログラムと格闘していると、思い込みが激しくなって、冷静に判断ができなくなってしまいます。
そうなってしまうと、間違いとかも見落としますので、一旦、別の作業をしましょう。
例えば、設計資料を作る、メールの確認、ほかの人の作業を除きに行くなどです。
一番いいのは、散歩とか、コーヒーを飲むとか、仕事と全く違うことをすることが一番です。私は、次の日にやって、うまくいったということが、多々あります。
結局、無理に何時間もやるより、脳をリフレッシュしてあげることが必要なんだと思うのです。
とはいえ、勤務時間中なら、散歩とかは無理ですよね。せいぜい、トイレに行く程度でしょう。タバコ吸う人は休憩が長い気がしますが。
休憩することにとやかくは言いませんが、会社は個人的な休憩=給料泥棒と思っているので、それが困ったところです。
私は、ほかの人の作業を除きに行って、雑談します。そうしないと、やってられないのもありますが、集中力が持たないのです。
再度、仕切りなおしてみたら、意外とあっさり、問題が解決したりします。
まとめ
プログラム作成で行き詰まった時の対応方法を紹介しました。
私は、プログラムを動かしながら、ほかの人を巻き込みながら、うまくいかない箇所の修正をしていっています。デバッグコードも埋め込んで、動作確認することもあります。
デバッグコードも埋め込んで、動作確認することもあります。
時には雑談もして、気分転換も行っています。
結局、そのほうが早くプログラムが完成します。ずっと、プログラム眺めてても絶対に完成しません。
とりあえず、動かす。これに尽きると思います。
あなたが、もし、プログラムの作成に行き詰まったら、この記事を参考にしてみてください。きっと、早く解決できると思います。