週末のアプリ作成

androidアプリ個人開発者の実態を報告します。アプリの収入も公開中です♪

私がプログラミングでハマったコードを紹介します。auto変数初期化忘れ

こんばんわ、TF's appsです。

今回の記事は【プログラミング】ノウハウ的な紹介です。

実話です。(ご好評につき!?第二弾です)

 

私は組み込み系のソフト設計を約15年しています。

過去こんなソースコードでハマっています。

 

◆簡単にサンプルコードを記述します

f:id:TFs_apps:20190717223613p:plain

 

ポイントは【auto変数である[a]が初期化されていない】ところです。if(Z==TRUE)の条件に入らない時に不定値を返すことになります。

 

<補足>

・私が作ったわけではありません。先人のコードです。

・ソフト全体としては最低数十万ステップになります。

・現象は突然アプリが落ちるという内容です。

・発生頻度は稀であるという情報です。

 

 

調査していく中である操作をすると確実に再現することが分かりました。

そうメモリ使用状況によって現象が発生したり/しなかったりします。

 

このプログラムの欠陥は、

設計時にauto変数[a]の初期化を忘れている事にあります。

 

対策としては、auto変数[a] を初期化することで修正しています。

 

一番伝えたい事

auto変数だけでなく、グローバル変数も同じですが、変数は必ず初期化するべきです。

 

サンプルコードのように仮に【if(Z==TRUE)】の条件がなくても、初期化することをお勧めします。なぜなら、可読性が良いからです。auto変数が関数のトップで初期化されていると、初めてそのコードを読む人にとっては読みやすいです。例えば、グローバル検索してfuncAの下の方にジャンプして、解読していく中で、ふと「変数aの初期値は?」と考えることがあるでしょう。

 

また今後どんな処理が追加されるか分かりません。その時の事を考えて、初期化することが望ましいでしょう。

 

私の持論ですが、今の時代、ソースコードにはテクニック(メモリを最小に抑えた、ステップ数が少ない、処理速度が数μsec速いなど)は不要です。低スペックマシンのソフトにおいては必要だったでしょう。

今の時代に必要なのは、可読性(=保守性が高い)でしょう。安心安全なソフトが一番大切と考えます。

 

 

いかがでしょうか。今回は自身がハマったコードについて紹介しました。このシリーズはそんなに読者の反応が良くないですが、今後も紹介もしていきますね^^v

ではまた次回お会いしましょう♪