Blog

新人日記

C言語の魅力

こんにちは。新人プログラマーの住友です。年が明けて早1ヶ月、2月です。2月は節分がありますが、別のイベントの方が印象が大きいです。もう大人なので特にソワソワすることはありませんが、学生の頃は誰かがチョコをくれるのではないかと毎年無駄な期待をしていたものです。ちなみに私の最高記録は6個でした。純度100パーセントの義理チョコでしたね!でもまあ、義理であれもらえると嬉しいものです。男とは自分が思っている以上に単純なものです。そして1ヶ月後に何を返せばいいのか全く分からず絶望することになるのはお約束です。

さて、本題に入りますが、今回は数あるプログラミング言語の中でも自分の好きな言語であるC言語について、自分の思う魅力を書いていきたいと思います。
※あくまで個人の感想です。

※用語集
コンパイル : ソースコードをコンピュータが実行可能な形式に変換すること
コンパイラ : コンパイルを行うソフトウェア
メモリ : データの一時記憶を行う領域
アドレス : メモリの番地
高級言語 : 人間に理解しやすい構文や概念を持ったプログラミング言語

その1.環境構築が容易

現在、PCのOSはMacOS、Windows、 Linuxが大半を占めていると思いますが、この3つの環境においてはC言語で書いたプログラムを走らせるのは非常に容易です。用意する必要があるのはgccコンパイラだけです。インストールもすぐ出来ます。gccコンパイラを用意出来たら、任意のテキストファイルにCのプログラムを書き、ターミナルからgccコンパイラを走らせるだけで実行ファイルが作成できるので、ちょっと勉強をしたいときにすぐ出来るという点が魅力的です。

その2.ポインタという概念

C言語と言えばやはりポインタです。ポインタは、ざっくり言うとメモリのアドレスを直接指定したり、変数のアドレスを調べたりすることができる機能です。最初はこの機能の利点が全く分かりませんでしたが、プログラムを書いているうちにポインタの良さというものがだんだん分かってきました。例えば、ポインタを使用すれば、配列変数がコンピュータにどのように保持されているのかや、リスト構造はなぜ要素数を任意に増やすことができるのか、等を知ることができます。ポインタを利用できるようになると、自然とコンピュータのアドレスやメモリの理解も深まっていき、ソフトウェア側の知識だけでなく、ハードウェア側の知識も増やすことができる点が魅力的です。

int型配列変数aの格納アドレスを表示したものです。
4byteごとに連続して並んでいるのが分かるかと思います

その3.他の高級言語と比べて便利すぎない

個人的にC言語は他のメジャーな高級言語であるjavaやpythonと比べて結構不便なところが多いと思います。一例をあげると、C言語には文字列型という概念がありません。厳密にはjavaにも文字列型はありませんが、標準ライブラリを使用すれば容易に扱うことができます。pythonでは特に何も考えずに扱うことができます。C言語で文字列を扱おうとすると、char型と呼ばれる1文字だけを格納することができる変数の配列を作るか、先に文字を格納するための連続するメモリ領域を確保し、ポインタを使用して各アドレスに1文字ずつ格納していく等の作業が必要となります。正直面倒くさいです。ある程度アドレスとメモリの知識が無いとすぐにバグります。でもだからこそ面白いと思います。単純に扱うことができないからこそ、どのようにすれば文字列という概念をコンピュータで保持と使用ができるのかという知識が必要となり、文字列を扱えるようになると同時にその知識も身に着けることができます。このように、便利な機能が無いからこそ、自然とその機能を扱えるようになるための知識が身についていくという点が魅力的です。

その4.バッファオーバーフローに注意深くなる

C言語で作成したプログラムを使用すると、バッファオーバーフローでプログラムがとんでもない挙動をすることが多々あります。バッファオーバーフローとは簡単に言えば、データの格納領域にその領域以上のデータが入力されてしまう現象です。C言語の入門でほとんどの場合紹介されるscanf()関数の使い方を誤れば発生してしまいますし、普通に書いていても意図せず発生してしまうことが多いです。この現象の難点はコンパイル時には分からず、実行して初めて発生することが分かるという点です。大抵の文法的エラーはコンパイル時にコンパイラによって発見され、その時に修正を行うことができますが、この現象はコンパイラのエラー検知をすり抜けてしまいます。よって、C言語を使用する際はこの現象が起こらないか常に考えて書く必要があり、自然とプログラムを書く際の注意力がついていく点が魅力的です。

以上4点、個人的に思うC言語の魅力について記してみました。他にもありますが、まとめると、”気軽に扱うことができ、ポインタも楽しいが不便なことも多い、だけどそこが良い”という感じでしょうか。もちろん自分も状況によってはpythonやjava等のほかの言語を使用することもありますし、それぞれ便利で良い言語だと思います。ただ、1番と言われるとやっぱり自分にとってはC言語かなと思います。

次の記事へ