FloraIT情報とか雑多な情報とか。この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。午後の問題のうち、C言語の設問にひどいコードが出ているとのことである。平成27年度秋季の問題のを確認したところ、問9のコードがひどいことを確認した。ここでは、どの点で望ましくないのか当方なりに説明して、改善案を提示してみたい。何がなぜまずいのかまず、どの点でなぜまずいなのかを説明を行いたい。当方としては、以下の点が挙げられると考えている。グローバル変数を使いすぎマジックナンバーの使いすぎ文字列の配列のサイズの根拠が不明瞭まず、「グローバル変数を使いすぎ」の点だが、このコードでは一つのファイルしか使っていない関係上、グローバル変数の弊害がわかりづらいが、グローバル変数はどのファイルからでも自由にアクセスできてしまう関係上、気づかないところで変数の値が変わってしまい、想定していない動作を招いてしまうことがある(特にライブラリーを使う場合は特に気をつけなければならない)。そのため、基本的には極力ローカル変数、あるいは構造体の変数などを使うようにするのが鉄則である。次にマジックナンバーの使いすぎであるが、当該コードではそのフォーマットの関係上、やはり弊害は少ないが、配列のサイズなどでマジックナンバーを使っており、配列サイズの意味が不明瞭になってしまっている。文字列の配列のサイズの根拠が不明瞭という点については、これは上記のマジックナンバーの使いすぎという部分にも関連してくるが、C言語の文字列を表現する場合、通常は文字列のポインターあるいは配列として表現しなければならないが、基本的にはNULL文字を加えた上でのサイズとなることを明示しなければならないが、当該コードではそれが明確になっていない。改善案さて、上記の点を踏まえて、当方が考えた改善案を以下に記述してみたい。"OUT");}}[/code]こうすることによって、グローバル変数は(const修飾されたものを除いて)根絶され、すべてローカル変数として使われるようになった。することによって意図せぬアクセスも減少され、保守性も向上すると考えられる。ハードコーディングについてはどうしても残っているものの、配列部分などで極力const修飾されたものに置き換えたことと、1回しか使わない部分はコメントを加えることで対処を行なった。文字列のサイズについてもまずはNULL文字を配慮しない文字数をconst修飾で定義した上で、NULL文字分を+1で加算するという方式を使った。これによってある程度は明確化された。最後に時折試験問題に出てくるコードはひどいものが出てくることがあるらしいことはなんとなくわかった。いったコードを見かけたときにどうやったらより良いコードができるのかを考えてみると良いだろう。当方が上記に書いたコードはあくまで改善例の一つの方法だが、コードを修正するにあたってより適切な方法を考えて、適宜修正していきたいものである。Tomomiウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。