C言語入門 #01 なぜC言語なのか?

プログラミング C言語入門
#01 なぜC言語なのか?

プログラミング C言語入門 #01 なぜC言語なのか?

こんにちは! IT 系企業出身の写真講師岡田です。

前回の動画では丸レフチャレンジをお送りしましたが、今回は何と写真と関係ないパソコン関係の話題をお届けしたいと思います。

プログラミングの話題 C 言語入門です 。

小学校でもプログラミング教育が必修化されるなどその重要性はますます増えています 。

小学校の新学習指導要領でもタイピングなどコンピューターの基本的な活用スキルのほか、コンピューターを動かすための考え方つまり論理的思考を身につけることが求められています。

プログラミングと言うとなんかものすごく難しいものを想像される方もいらっしゃると思いますが、決してそのようなものではございませんのでご安心下さい。

人間が苦手とする単純計算をひたすら繰り返すようなことをコンピューターに任せることができ、生活を豊かにすることができると信じております。

C言語とは

C言語とは

まず、C言語とは何かについてお話したいと思います。

C言語は英語で C programming language と言います。

1972年に AT&Tベル研究所のデニス・リッチーが主体となって開発した汎用プログラミング言語です。このベル研究所ですが電話の発明者グラハムベルに縁がある研究所です。

制御構文などに高水準言語の特徴を持ちながらハードよりの記述が可能な低水準言語の特徴も併せ持ちます。低水準言語の意味は、水準が低い悪い言語という意味ではなく、コンピューターの ハードウェアに直接命令するのに近い記述が可能な言語という意味です。低水準言語は「機械語に近い」言語、これに対して、高水準言語は、「人間にとってわかりやすい」言語という意味です。

そのことから基幹系システムや、動作環境の資源制約が厳しいあるいは実行処理性能が厳しく要求されるソフトウェアの開発に用いられることが多いです。

実は、私もコンピュータの開発ではなく、ある実行処理性能が厳しく要求される機械に組み込まれているソフトウェアの開発に長いこと関わっておりました。

後発のC++やJava、C#など、「C系」と呼ばれる派生言語のご先祖でもあります。

今ではANSI、ISO、またJISによって言語仕様が標準規格化されております。

プログラミング言語の歴史

プログラミング言語の歴史

これはプログラミング言語の歴史を表した系統図ですが 、C 言語は多くの言語に影響を与えていることがお分かりになると思います。

C 言語の仕様を拡張して作った C ++はもちろんのこと、Java や C#,PHP, perl など今では主流となっている多くの言語に影響を与えております。

なぜC言語?

なぜC言語?

たくさんあるプログラミング言語でなぜ C 言語なのかということに関しての私の考えをご説明させていただきます。

まず C言語は比較的小さな言語であるということです。これはC言語の仕様は小さいスペースで記述できる、つまりC言語は短時間で学ぶことができるということを意味しています。例えば C 言語には言語仕様上、入出力の機能さえなく、入出力は全て各メーカーが提供するライブラリ関数で提供されます。また、このことにより移植性が高いという特徴もあります。例えば、あるOS 向けに作ったソフトが別の OS 向けにも比較容易に使えるようにすることができるということです。

次に、派生言語がたくさんあり、他の言語を覚える時に応用が利くということです。先ほどの系統図でご覧になっていただいたように、C言語から派生した言語がたくさんあります。それらの言語の中には C 言語の考え方がたくさん残っていますので、それらの言語を学ぶときにもその C 言語で学んだ知識がすごく役に立ちます。

また、国家試験である基本情報技術者試験のソフトウェア開発分野で採用されているプログラミング言語の一つでもあるということです。C言語を学ぶことは、基本情報技術者試験の対策にもなるということですね。

また、C言語を学ぶことでコンピューターのハードウェアの理解も出来るようになります。これは高級言語に類するプログラミング言語ではなかなか難しいことです。

また、C言語はタイピング量が少なくてすむということです。これは特にプログラミングを仕事にする場合、同じ時間でたくさんの処理が記述できるということを意味します。C言語の親戚にあたるPASCALなどと比べて、コーディングに必要なタイピング量が少なくてすみ、表現の簡潔さ、実用性が考慮されています。タイピング量が少なければ、ソースファイルのサイズも小さくてすみますし、何といっても、コーディング時間が節約できます。ほんの少しタイピング量を節約できるだけでも、毎日のようにプログラム開発している人にとっては切実な問題になります。

最後に、プログラム言語人気ランキング2020で C /C ++が1位を獲得したという点です。これは仕事にする場合も、C言語の知識が求められているということに他なりません。

私が選んだC言語の3大特徴!

私が選んだC言語の3大特徴!

次に私が選んだ『C言語の3大特徴』についてお話したいと思います。

これは私がC言語が好きな理由でもあります。

1つ目は C はぶっきらぼうな言語であるということです。「なに、ぶきらぼうなこと事言ってるの!?」なんて言われちゃいそうな表現ですけどね。C言語の名前の由来は、BCPLという言語からB言語が生まれ、その次だからC言語という単純な発想によるものだそうです。この風習はCのスーパーセットだから C ++という風にその後も続いています。

2つ目はC言語は学者様が考えた言語ではないということです。1972年にトンプソンとUNIXの開発を行っていたデニス・リッチーは、B言語を改良し、実行可能な機械語を直接生成するC言語のコンパイラを開発しました。アセンブリ言語で UNIXが作成されると OS 上で動くユーティリティを作成するためのプログラム言語が必要とされました。C言語のコンパイラができあがり、UNIX バージョン2においていくつかのユーティリティを作成するために使用されました。のちに UNIXは大部分をC言語によって書き換えられ、UNIX上のプログラムはその後にC言語を広く利用するようになった。このような経緯もあり、『学者様が考えた言語』のようには安全性などほとんど考えられていません。学者様が考えられた言語を使われていた方は、C言語で作ったプログラムがいとも簡単に暴走、いや爆走し出すことに驚かれるでしょう。しかし安全性を無視している分、そのプログラムの高速性は、『学者様が考えた言語』の殆どは相手になりません!また、近年の最適化技術のめざましい進歩により、下手に人間様が作ったアセンブラプログラムより高速な場合も少なくありません。

3つ目はC言語は開発者の主体性を尊重しているということです。C言語のソースコードの書式はフリーフォーマットを採用しています。つまり同じ命令をいろんな風に書くことができるということです。このことはプログラムをコーディングする人間様の主体性によっていくらでも解読困難なソースコードを書くこともできますし、いくらでもわかりやすいプログラムを書くことをできることも意味しています。『考え方もそうだけど、言葉遣いや説明の仕方もキミに任せたよ!』といったところでしょうか。一度この道に足を踏み入れると、わかりやすいソースコード作成が趣味になり、その道から抜け出すのは困難になります。これは開発者にとって、とても良いことですけれども、れぐれも病的にならないように注意しましょうね。

C言語とPASCALのコーディング比較

C言語とPASCALのコーディング比較

C言語とPASCALのコーディング比較です。

どちらも“Hello World”と出力するプログラムです。

この例では、C言語が52文字、PASCALが58文字と僅差ですが、これは先ほどもお話した通り、C言語には入出力の機能さえないので、文字を表示する printf()関数を使用するためのおまじないのINCLUDE文が必要となっているためです。

一度、#include <stdio.h>を行ってしまえば、このプログラムファイルではprintf()関数を何度でも使用できますので、その差は広がります。

巷で言われているC言語の主な特徴!

巷で言われているC言語の主な特徴!

次に巷で言われているC言語の主な特徴をご紹介しましょう。

まず先ほどもお話ししたとおり、フリーフォーマットが採用されています。

次の特徴は、構造化プログラミングが可能ということです。これはブロック化や近代的な流れ制御構造が用意されているということです。これは分かりやすいプログラムを作る上で必要になっています。分かりづらいプログラムの代名詞に、スパゲッティコードやスパゲッティプログラムといわれるものがありますが、これは、命令の実行順が複雑に入り組んでいたり、遠く離れた関連性の薄そうなコード間で共通の変数が使われるなど、処理の流れや構造が把握しにくい見通しの悪い状態になっているプログラムのことです。処理の流れが脈絡なくコード上のあちこちに飛んでしまっており、どこがどこに続いているのか極めて分かりにくくなっている様子を、皿に盛られて絡まりあうスパゲッティに例えた表現です。プログラムをスパゲッティ化させないためには、制御構文などを適切に用いて処理の流れを見通しやすくする、構造化プログラミングが有効です。

次の特徴は、モジュール化が可能ということです。これはプログラムを関数と言う部品に分けて開発することができることを意味しています。これにより複数の開発者が作業を分担して開発するということが可能になっています。関数を用いて適切に機能を分割・整理するといったことを心がけことは、スパゲッティプログラムを避けるのにも役立ちます。

次に、これも先ほど少しお話ししましたが、比較的低水準な言語ということです。これはビットごとの論理演算・シフト演算・ポインタをサポートしていることを意味しています。これにより、ハードウェア性能をフルに活用したコーディングが可能となっています。なかでも、”ポインタ”は、C言語を学ぼうとされた方が挫折されることが多い、C言語最大の登竜門です!でも、分かってしまえばそんなに難しいものではありませんし、”ポインタ”を使わなくても、”C”でプログラミングすることはできます。ただ、ポインタを理解しないと、マシン性能をフルに活用することはできません。

次に、プリプロセッサーが用意されているということです。これはファイルの取り込み(インクルード)やマクロ定義ができることを意味しています。

次に、複雑なデータ構造を記述可能ということです。これは構造体・共用体・ポインターが用意されていることを意味しています。BASIC言語などは、使用する変数が増えていくと、『何がなんだか分からなくなっちゃった!』といったことが起りがちですが、C言語では変数をグループ分けして、一つの変数としたり、BASICなどでは表現できないデータ構造を表現することもできます。

次の特徴は、再帰呼び出し(リカーシブコール)が可能ということです。再帰呼び出しのメリットを一言で説明するのは難しいのですが、ソートのアルゴリズムでよく使用されています。

最後の特徴は、すべての変数は型を宣言しなければならないということです。これは、すべての変数は、使う前に型を宣言しておかなくてはいけないということを意味しています。型の宣言とは、その変数が、整数なのか・小数なのか、文字なのか・文字列なのか使う前に決めておくということです。型宣言が必要のないプログラミング言語ユーザーなどは、『なんだ、そんなの面倒くさいや!』と思われるかもしれませんが、これは非常に重要なことなのです。

C言語界の経典?

C言語界の経典?

最後に C 言語会の経典についてご紹介しておきますね。

 “C 言語を勉強したいんだけどお勧めの参考書を一冊教えて?”と聞かれたら迷わず迷わずお勧めできる本がC言語界にはあります。

それは「プログラミング言語 C」 という本でデニス・リッチーとブライアン・カーニハンの著作です。この方のお名前ってどこかで聞いたことがありませんか?そうです、C 言語を開発した人達ですね。この本のことを、お二人の名前の頭文字をとって「K&R」とも呼びます。入門書としてはあまり最適な本ではないかもしれませんが、C言語を本気で勉強したい人にとってはこの上なく興味深い本でしょう。 C言語が規格化されるまでは、事実上の規格書的な扱いを受けていた、現在でも古典的な教科書の一つです。

あとがき

eパ写(い~パシャ)

今回は C言語とは何か、そして多くのプログラミング言語の中でなぜ C 言語なのか、私がC言語が好きな理由などについてご紹介しました。

今日お話しした内容は説明不足で分からない部分もたくさんあったかと思います。これからより実践的な内容をお届けしたいと思います。

皆様の暖かいお声が私の力となります。興味を持たれましたら、コメントをお願い致します。

続きを見てみたいと思われたらぜひチャンネル登録・グッド評価をお願い致します。

皆様のお力になれれば私にとっても喜びです。

参考リンク

  • プログラミング言語C
    B.W. カーニハン, D.M. リッチー (著), 石田 晴久 (翻訳)
    第2版 ANSI規格準拠
    Amazon Kindle版 (電子書籍) https://amzn.to/2zEYcIr

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です