C言語を安全に使いこなすには、幅広い知識と技能が必要です。そのため現在では、「ほかの言語でできるならC言語は使うべきではない」などともいわれています。
一方で、C言語でなければ成り立たない開発というのは、今でもたくさんあります。本シリーズは、そんな現場に身を置くソフトウェアエンジニアのための、C言語にまつわる全30問のクイズ集です。楽しくて役立つ問題を揃えたつもりですので、プログラミングの腕試しにお役立てください。
問題の一覧を見るプロローグ〜「問題」って何だろう?












ソフトウェアエンジニアが直面する現実の問題は、学校の試験問題とは違います。問題の定義から解決までを、すべて自力で行わなければならないためです。解決策は、1つだけとは限りません。解決したあとでさえも、問題の定義が正しかったことを保証してくれる人はどこにもいません。
しかも、問題そのものも状況に応じて刻々と変化していきます。まずは、完璧な問題など存在しないということを受け入れる必要があるでしょう。そのうえで、いつでも「もっと良い方法はないか」と問いかける姿勢が大切です。
シンプルな問題で練習を
ソフトウェアエンジニアが直面する問題の多くは複合的です。小さな問題が同時に発生して絡み合い、より複雑な難問となって立ちはだかります。でも、複雑に見える問題も、解きほぐしてみれば一つ一つは意外に単純かもしれません。シンプルな問題について知ることが、複雑な問題を解決するためのエッセンスです。



本シリーズでは、一つ一つの問題がなるべくシンプルになるよう努めました。問題に取り組む際は、ぜひ「答え」までじっくり読んでみてください。簡単に解けた問題も、よく考えて深く理解すれば、きっと現実の問題とリンクする部分が見えてくるはずです。
問題一覧
小手調べの問題
C言語を使いこなすには、ポインタについて理解することが欠かせません。まずは、ポインタに関する基本問題からはじめましょう。
バージョンの問題
次も基本問題ですが、昔のC言語しか知らないと何のことだか分からないかもしれません。C言語には、いくつかのバージョンが存在するためです。
常識の問題
完全に間違いとはいえないまでも、常識的に考えればあまり良くないプログラムもあります。ということで、次は常識を試す問題です。
横着者の問題
プログラミングでは、ほんの少しの手間を惜しんだために、あとから痛い目に遭うことも少なくありません。次は、横着が損になる問題です。
備えの問題
将来の問題を回避するために、今からできる簡単な備えがあります。次は、先のことを考えたプログラミングの問題です。
メモリー操作の問題
C言語のメモリー操作には、慎重さが求められます。次は、見つけづらいバグのもとにもなりかねない、メモリー操作のミスに関する問題です。
習慣の問題
分かりやすいプログラムは、たくさんの作法や定石でできています。次は、ぜひ身に付けておきたい習慣に関する問題です。
避けては通れない問題
メモリー上で起こっていることを理解できれば、さらにC言語を使いこなせるようになります。次は、ポインタとメモリー操作の問題に、もう一歩深く踏み込んでみましょう。
長く潜伏する問題
今は正常に動いていても、将来の改造や拡張で表に現れる時限爆弾のような問題もあります。次は、そんな爆弾をプログラムに埋め込まないための工夫に関する問題です。
ちょっとしたTIPSの問題
ここまで読んでいただき、ありがとうございます!最後はプログラムをいい感じにする、ちょっとしたテクニックの問題です。