【漫画でIT入門】とあるIT企業の社員活動日誌 第19話「プログラミング学習のすゝめ⑤ C言語とは?特徴と出来る事」
パソコンを使う人のありそうでなさそうなお話や、ガジェットのお話を漫画で紹介させていただくコーナーです。
とあるIT企業に務める彼女たちは日々楽しく真面目に業務に励んでいます。その中で、起こったハプニングや困った事などを活動日誌を通して覗き見していきましょう。
※当ブログは、アフィリエイトプログラムに参加して商品を紹介しております。当ページのリンクを介して商品を購入すると著者に収益が発生することがあります。
【漫画で入門】「とあるIT企業の社員活動日誌」各話一覧はこちら
目次
C言語とは?
C言語(しーげんご、C language)とは、コンピュータのソフトウェアをつくる際に使用されるプログラミング言語の一種です。
1972年にアメリカAT&T社ベル研究所のデニス・M・リッチー(Dennis M. Ritchie)氏とブライアン・W・カーニハン(Brian. W. Kernighan)氏によって開発されました。
開発の目的は、UNIXの移植性を高めるためでした。そのため、高水準言語の特徴を持ちながら、メモリ管理などのハードウェアの制御が行なえる低水準言語としても動作します。 UNIXの大部分はC言語によって書かれています。特定のプラットフォームに依存した部分を言語仕様から切り離しているため、移植性の高いプログラムを書くことができます。
高い汎用性を持ち、特にハードウェアに密着した処理を必要とする分野での処理を得意とするのが特徴です。
C言語にオブジェクト指向の仕様を追加してできたプログラミング言語がC++言語です。C言語はC++言語とともに、現在もっとも普及しているプログラミング言語です。
C言語の特徴とは?
C言語の特徴はおもに「歴史」「汎用性」「処理速度」「手続き型」 の4つでまとめられます。
C言語の特徴①「歴史」
C言語の特徴の一つはコンピューターが発達・普及し始めた初期の時代からある歴史ある言語であることです。
1972年に開発されこれまで40年以上、ソフトウェアからハードウェアまで様々な開発現場で採用されてきたC言語は多くのエンジニアに信頼されている言語です。
有名どころのプログラミング言語ではPythonが1991年、Javascriptが1995年の開発であり、他の言語と比べてみると非常に長い歴史を誇っています。C言語は1990年台半ばには、プログラミングを習得するために最初に学ぶべき言語としての地位を確立し、C言語よりも後に登場する様々なプログラミング言語に影響を与えました。
例えば、C++、Java、Objective-C、PHP、Perl、PythonなどはC言語に影響を受けている言語であるため、C言語のスキルがある人であればこれらの言語の習得も比較的簡単に行えるでしょう。
C言語の特徴②「汎用性」
C言語は機械語やアセンブリ言語に近いプログラミング言語です。
その為C言語はコードの記述量が多くなる反面、自由度や汎用性は高いというプログラミング言語になります。コードの記述量に関しては、機械語やアセンブリ言語と比較すると圧倒的に少なく済みますが、最近のプログラミング言語と比較すると多くなってしまいます。
また、自由度や汎用性が高いというのは、「いろいろなことをプロセッサに命令できる」ということです。プロセッサとはCPUなどのデータや命令を処理するハードウェアのことで、C言語はこのプロセッサに対してより具体的な命令をすることができます。
そのため、C言語はコンピュータの性能をより引き出す「チューニング」ができたり、コンピュータの脳である「OS」の開発ができたりします。
また、C言語は、そもそもマルチプラットフォームであるため、環境に依存せずに実行できます。そのため、実行環境に縛られず同じコードを異なる環境でコンパイルして使用できます。
また、どのような実行環境にも実装できるため、特に組み込みの分野で強みを発揮します。
C言語の特徴③「処理速度」
C言語はいわゆるコンパイル方式言語とよばれ、プログラムを実行する前にソースコードを全てコンピューターが理解できる言葉(機械語)に翻訳し、処理が開始される方式の言語となります。コンパイル方式は翻訳作業を最初にまとめて行うことで、処理の実行速度を速めることができます。C言語の他にはJAVA、COBOLなどがこの方式によって動作しています。(Python、Ruby、JavaScriptなどはインプリンタ方式と呼ばれ書かれたコードがその都度解釈された機械語として実行されていきます。)
実際に実行速度を測っている記事があったので、リンクを貼っておきます。
【まとめ】フィボナッチ数だけで50ぐらいのプログラム言語に精通したつもりになる – Qiita
この記事では、フィボナッチ数列のプログラムの処理時間を比較していますが、C言語の処理時間は、
• JavaScriptの2倍
• PHPの4倍
• Pythonの91倍
と高いスコアを叩き出しています。
C言語の特徴④「手続き型」
C言語は手続き型言語であり、構造がシンプルです。
現在多くの言語で採用されているオブジェクト指向と比較すると、上から下に処理が流れていくことが多いためソースコードの流れを理解しやすいという特徴があります。 (手続き型プログラミング言語とはコンピューターがプログラムを実行すべき命令や手続きを順に従って記述していくことで構成されるプログラミング言語の種類です。手続き型プログラミング言語は処理を順番通りに構成していくことから「コードが記述しやすい」ということや「学習コストが低い」という特徴があります。代表的な手続き型プログラミング言語としてC言語、COBOL、Perlなどが挙げられます。)
※手続き型プログラミング言語とオブジェクト指向言語の違い
手続き型プログラミング言語とオブジェクト指向言語の違いについて簡単に解説します。
手続き型プログラミング言語は『シンプルでわかりやすい構造』のに対して、オブジェクト指向言語は『抽象的で構造がイメージしにくい』ものです。
これはなぜかというと手続き型プログラミング言語は「プログラムを実行すべき命令や手続きを順に従って記述していくことで構成される」ため処理の順序を非常にイメージがしやすいことが分かります。一方でオブジェクト指向言語は「お互いに関連するデータやメソッドに関する手続きを一つにまとめたものである「オブジェクト」をプログラムの基本的な構成として扱うもの」ですのでイメージはしづらく概念として捉える方が良いものです。
その他の要素で比較した表は以下をご覧ください。
C言語で出来る事とは?
C言語は万能言語とも言われるように汎用性と自由度はピカイチで す。その為、多くの事を行うことが可能な言語です
C言語で出来る事①「OS開発」
C言語はハードウェアの制御が可能であるため、細かなハードウェアの管理を必要とするOS(オペレーティングシステム)の開発に用いられています。
C言語によって開発されたOSの代表例としては、Mac OS XやLinuxの中核を担っているLinuxカーネルがあります。他にも、組み込み系のOSなどに使用されています。
C言語で出来る事②「基幹系システム開発」
基幹系システムは、万一障害が発生するとその損害は膨大なものです。そこで、長い歴史のなかで積み上げられた信頼と実績があるC言語は、安定性と処理速度が高速である特徴を生かして、基幹系システムの開発に使用されています。
基幹系システムは処理が集中することもあり、高速で処理しながらシステムダウンを避けられるC言語は最適なプログラミング言語といえます。
C言語で出来る事③「IoT/AI開発」
近年需要が拡大しているIoTやAIの分野でもC言語が使用されています。
AIというと機械学習や人工知能の開発に強いPythonのイメージがありますが、組み込みに使用されるエッジAIの場合、ハードウェア的にリソースが少ない端末にAIを組み込む必要があるため、実行ファイルのサイズが小さく、処理速度が高速なC言語が選ばれることがあります。
同様にIoT機器もハードウェア的な制約が大きく、加えて持続的な電源供給がない場所で長期間使用されることもあるため、省電力である必要があります。その点においても、ハードウェアの制御まで踏み込んでプログラミングできるC言語は他の言語よりも強みがあります。
C言語で出来る事④「ロボット・組み込み系開発」
右足、左足を交互に前に出すことでロボットを前進させる、障害物を検知すると止まる、といったロボットの動きを制御するために必要なプログラムは、C言語で開発することができます。
ロボット開発には、もちろんロボットの形や大きさなどの「外見」も重要です。しかしそれと同じくロボットの行動を制御する「中身(脳みそ)」も重要であり、優れたロボットはそれだけ優れたプログラムが施されているということになります。
また、ロボットと同じく、電子レンジやテレビ、車など普段私達が利用している様々な家電製品にも多くのプログラムが搭載されています。 このようなプログラムの事を「組み込み系ソフトウェア」と呼び、例えば炊飯器であればお米が炊き終わったら自動的に保温にする、電子レンジであれば設定した時間分温めたら自動的に停止する、といったプログラムを指します。
C言語で出来る事⑤「ゲーム開発」
企業の基幹システムやロボット開発などに利用される一方で、ゲーム開発にもC言語は用いられています。現在でも大手のゲーム会社では開発にC言語が採用されているため、ゲーム開発がしたいからC言語を学ぶ、という人も多くいます。
ただし、ゲーム開発はC言語だけでなくその他の言語も併用して開発するため、ゲーム開発が行いたい人は合わせてC#なども勉強すると良いでしょう。
C言語で出来る事⑥「各種ソフトウェア開発」
例えば「企業のバックオフィスで利用されている社員の個人情報や給与の情報を扱うシステム」「売上管理やコスト管理のシステム」などの大規模なシステムで、C言語を利用して開発されたソフトウェアはたくさんあります。
C言語で開発されていることが多い理由として、長い歴史の中で積み上げられた信頼と実績、そしてC言語の特徴である「高い処理速度」があります。
官公庁や金融機関、日本を代表する大企業で利用されているシステムは、その多くがコンピュターが普及し始めた初期にC言語によって開発されたもので、改良や機能追加などを繰り返しながら現在でも現役で稼働しているものもあります。
C言語の基本文法
C言語は上記でも説明している通り「手続き型」のプログラミング言語です。その為基本的にはプログラムは記述されている順序通りに実行されていきます。つまり上から下に順番に処理されていくという事です。
それでは、C言語の基本的な流れ・記述構文を「Hello,World」出力で簡単に確認しましょう。
C言語で「Hello,World」を出力する
#include <stdio.h> int main() { printf("Hello,World!¥n"); return 0; }
まず、1文目の #include <stdio.h> ですがこれを「include文」と呼びます。
#include <【ファイル名】>と書くことでそのファイルであらかじめ定義されている関数を利用することができます。今回の「printf()」という関数を使うために「stdio.h」というファイルをインクルード(他のファイルに書かれている内容を取り込むこと)しています。 「stdio」は標準的な入出力を行います。
次にc言語の核ともいえる記述です。C言語で書かれたプログラムは、まず「main関数」から実行されることになっています。
int main()
{
}
この塊が「main関数」のブロックになります。基本的にはこのブロック内に実行していプログラムを記述していきます。
では、「Hello,World」出力のmain関数の中身を簡単に見ていきましょう。
まずは1文目の「printf(“Hello,World!¥n”);」では「Hello,World」をコンソール上に出力する為のプログラムです。
「printf(“【出力する内容】”)で文字を出力することが可能です。そして、「Hello,World」の後の「\n」は改行を表す表記になります。
2文目の「return 0;」では「main関数を終了する」という処理を実行します。詳しく解説すると長くなるので省きますが「main関数」が終了するとプログラムも終了することになっています。その結果、「return 0;」と言う行が実行されるとプログラムが終了するわけです。
以上の流れがC言語の簡単な流れと基本構文になります。
さらに勉強していくと制御文や関数・ポインタなどが出て来て複雑になりますが出来ることも多くになりますので興味のある方は勉強してみてください。(ポインタで躓く方が多いとか・・・)
まとめ
今回はプログラミング言語のC言語について特徴やできること、そして基本的な構文をお話していきました。
C言語はアセンブリ言語の影響を受けており低水準的な動作も行うことの出来る高水準言語となっています。
そして、多くのプログラミング言語の基礎となっている言語でもあります。その為、C言語を知っていることで他の言語に応用することもできるかと思います。それだけC言語は勉強して損をしない言語になっています。
これから多くの言語を紹介していきますがそれらの言語よりもC言語は難しいと思います。ですが面白い言語ですのでめげずに頑張ってください。
さらに学べるおすすめ書籍
・スッキリわかるC言語入門 第2版 (スッキリわかる入門シリーズ)
・ベテランプログラマーが伝授!現場で20年使える「C言語」入門