あなたは、「C言語を学習してみたいけれど、どこから手をつけて良いのかわからない。」や「C言語はよく挫折する人が多いと聞くので、学習する順番などを知りたい。」、「C++(シープラプラ)を勉強したいんだけど、どうやるんだろう…」
こういった悩みをお持ちではありませんか。?
C言語は比較的難易度の高い言語ですので、そんな悩みも尽きないですよね。実際多くの方が挫折していることは事実です。
そこで、今回はC言語/C++の入門がスムーズに行えるように予備知識とオススメの学習サイトをまとめました。こちらを参考にして、効率よくC言語を学び、ぜひC言語を使えるようになりましょう!
目次
C言語/C++の概要
C言語は、1972年にアメリカのAT&T社ベル研究所のデニス・M・リッチー氏とブライアン・W・カーニハン氏によって開発されたプログラミング言語です。また、その後継として1982年に開発されたのがC++です。
C言語は歴史が古く、その後のプログラミング言語ほぼ全てに影響を与えました。様々な言語のもとになっており、元祖プログラミング言語とも呼べる言語なのです。
C言語はただコードを書いただけでは動作せず、動作をさせるためにはコンパイルという行為が必要となってきます。
コンパイルというのは、人間がわかりやすく書いたコードを、機械がわかりやすいコードに変換する作業のことを指します。
この2つの言語は、実行速度最速の異名を持ちます。汎用性が高く、UNIX等のシステムソフトやアプリケーションなどにも、非常に幅広く使われています。C言語が広く使われるようになった利用は以下の通りです。
- ハードウェアに密着したコーディングが容易であった
- 言語仕様が小さくコンパイラの開発が容易であった
- 少ないリソースで実行可能なプログラミング開発が容易であった
- UNIXでの実績があった
- コンパクトプログラムが書ける
- スピードが出せる
- メモリの効率的な利用
- 早くに標準化がなされ標準規格化がされた
IT業界のいろいろなものがC言語で作成されており、C言語が無くなることは考えづらい状況です。万が一、C言語を使った開発などが行われなくなったとしても、これまでのシステムやプログラムの運用や管理は、C言語で行われていきます。
このような背景から、長い歴史を持つC言語は、今後もその歴史を刻み続けていく、将来性のあるプログラミング言語だと考えられています。コンピュータがある限りC言語は無くならないでしょう。
さらに、C言語にオブジェクト指向の仕様を追加してできたプログラミング言語がC++です。C言語はC++とともに、現在もっとも普及しているプログラミング言語です。
C言語はじめこれまでのプログラミング言語は、最初にデータの定義を行いそのデータを処理する手続きを記述する手続き型の言語であったため、現実の事象を表そうとしたときにデータの定義や手続きの記述が複雑になってしまう問題がありました。
C++では、関連するデータとこれを用いる処理を1つのグループにまとめたオブジェクトにすることにより、現実の事象を表した理解しやすいプログラムを記述できると考え、オブジェクト指向の概念が生まれてきました。
C言語/C++の特徴
C言語
C言語の主な特徴を、以下にまとめます。
- 手続き型言語であり構造化プログラミングに適している
- コンパイラ言語でありプログラムの実行速度が早い
- 低水準言語に極めて近い、高水準言語である
- ハードウェアを極めて低水準なところからコントロール(制御)できるため自由度が高い
- さまざまなCPUで動作するよう記述できる、移植性が高い
- プログラムの実行に必要なハードウェアのリソースが少なくて済む
- UNIXなどのOSの開発にも使われている
- 関数と呼ばれる処理手順登録の記述ができ、それを別の関数から呼び出して利用できる
C++
- C言語との互換性がある
- オブジェクト指向の概念
- 仮想関数
- 関数と演算子の多重定義
C言語/C++の違い
プログラミングを行う上での技術的な違い
Cは、高級アセンブラといわれるぐらい、ハードウェア寄りの記述を行うためのシンプルな言語です。Cを使って(必ずしもハードウェア寄りではない)アプリケーションの開発も可能ですが、開発効率は必ずしも高くありません。
しかし、手間はかかったとしても、できないことはほとんどありませんし、できあがったプログラムも、小さく、速くなるのが普通です。
一方、C++は、Cをベースに、オブジェクト指向プログラミングを容易にするクラスや、ジェネリックプログラミングのためのテンプレート、例外処理などの機能を大幅に追加したものです。
また、Cよりは厳密に型チェックが行われるなど、バグが発生しにくいように工夫されています。Cに比べれば開発効率は向上していますが、できあがったプログラムは、Cよりも、大きく、遅くなる傾向があります。
※こうゆう特徴なので、オススメする人はこんな人です
- ハードウェアに関連した開発に興味のある人
- プログラミングにどっぷりと浸かりたい人
- ゲーム開発に取り組みたい人
用途の違い
CとC++の用途は、かなり重複しているのは確かですが、Cしか使えない、あるいはCのほうが好まれる状況というのはあります。逆にいえば、そうでなければC++が使われると考えてよいでしょう。
Cしか使えない状況というのは、C++コンパイラが提供されていないようなプラットフォームや、メモリ容量が少ないローエンドのプラットフォームなどが挙げられます。
Cのほうが好まれる状況というのは、オペレーティングシステムやデバイスドライバのような、非常にハードウェア寄りの開発であるとか、高い移植性が要求されるような状況です。
CやC++より、他の言語のほうが好まれるという状況もあります。非常にハイエンドな環境であるとか、高い移植性を必要としないような状況では、もっと開発効率が高い言語が使われることが多いようです。また、4ビットマイコンや、プロセッサのアーキテクチャが向かないなどの理由で、CもC++も使えないようなプラットフォームも存在します。
C言語/C++の使用用途
代表的な使用例
・ロボット/組み込み系
「教育用ロボット」「産業用ロボット」「電子工作」「電子機器」「家電製品」半導体の開発 など
・ソフトウェア
「メモ帳」、「Chrome」「Safari」「Ruby」「Python」「perl」PCやネットワーク技術を支えている主なソフトウェア、スマホアプリ、ゲーム
・OS(基本ソフトウェア)
「Windows」「Mac」「Linux」などのOS(基本ソフトウェア)関係
C言語/C++を習得することのメリット/デメリット
コンピューターの動作に詳しくなる
C言語は、「CPU」や「メモリ」など、コンピューターのハードウェアを意識してプログラミングする必要があります。
ですので、コンピューターの基礎知識・仕組みや動作に詳しくなることができます。
それによって一般的に理解が難しいといわれているコンピューターに関する技術でも、かんたんに理解することができます。特に記憶領域を意識したプログラミングが可能です。
より深い知識を習得することが可能
WindowsやMac OSXなどの「OS」、MySQLやPostgreSQLなどの「データベース管理システム」、ApacheやNginxなどの「WEBサーバー」といった、コンピューターを支えている主要なソフトウェアはC言語で作られています。
C言語を学ぶことで、それらのソフトウェアのコードを読み解くことができるため、コンピューターの深い内部に関しても詳しくなれます。
それによって、よくわからないエラーやトラブルなどにも対応できるようになるのです。
最新技術への対応が速くなる
現在使われている技術は、すべて基本となる技術を組み合わせたものや拡張させたものがほとんどです。
C言語を学ぶことで、コンピューターの根本的な仕組みや概念が理解できるので、新しい技術もかんたんに理解し習得することができるのです。
例えると、スマートフォンを使えるなら、iPhoneでもAndroidでもWindowsPhoneでも使えてしまうことと同じです。
根本的なスマートフォンの仕組みや使い方がわかっているなら、新しく出る最新機種も「種類や機能の違い」を覚えるだけで済んでしまうからです。
それと同じようにコンピューターを知ることで、コンピューターに関する技術の習得が速くなります。
仕事の幅が広がる
C言語は汎用性の高い言語なので、なんでも作れるといって過言ではありません。
WEBアプリ、スマホアプリ、システム、ロボット、家電、電子機器などあげるとキリがありません。
C言語は、どの分野の仕事にも生かすことができ、その分野に特化した技術なども習得しやすくなります。
とくに最近では、「IoT(モノのインターネット)」をはじめとする組み込み系のプログラミンが注目されていますが、C言語の学習はすごく役に立つつでしょう。
デメリット
必要な処理をすべて書く必要があるため、初心者には向かないという声もあります。Javaよりもさらに難易度が高い言語であるため、初心者が最初に学ぶ言語としてはあまりオススメできないというのが正直なところです。
たとえば他言語にないポインタなどの概念を理解するには時間を要するでしょう。
C言語/C++の学習方法
オススメのサイト
ドットインストール
C言語入門 (全22回)
プログラミング入門の鉄板無料サイトドットインストールです。
ドットインストールでは動画を使った分かりやすい解説がされているので、プログラミング学習をどのようにすすめればいいのか、C言語では何が出来るのかといった概要をつかむのに最適です。
Schoo
C言語入門(全10回)は、C言語のプログラミング方法について、順次・分岐・繰り返し処理方法と関数作成方法を学習していきます。(980円/月額;プレミアム会員 見放題)
この授業では「Visual Studio」を使用し、プログラムを読むこと、C言語の簡単なプログラムを作成することができるようになることを目指します。
一週間で身につくC言語(C++)の基本
C言語の基本から応用までを1日単位のレッスン形式で解説してくれているサイト。
概ねある程度の長さで切り分けられているので、自分でもペースメイクして学習を進めることが出来ます。
初心者のためのポイント学習C言語
URL:http://www9.plala.or.jp/sgwr-t/index.html
こちらもC言語学習において基礎学習と演習を行っていくスタイルのサイトです。
理解を深めるために演習問題に取り組んで、たくさんの問題を解いていきましょう。
C++入門
C++の入門講座
一週間で身につくC/C++言語 | Udemy
この講座では難しい概念をやさしく解説すると共に、実用レベルまでのプログラミングを最短時間で学べるようにコースが設計されています。
しかも豊富な演習問題で、プログラミングの腕前を着実にアップすることができます! (有料)
オススメの入門書
やさしいC 第5版
高橋 麻奈 (著) ¥2,700
経験がなく、はじめてプログラミングをはじめる人にも、無理なくプログラミングの基本から学習してもらえるように、次の点を心がけています。
・読みやすい解説でスラスラ読み進められます。
・豊富なイラスト図解で、概念をイメージでわかるようにしています。
・たくさんのサンプルプログラムで、試して理解できます。
C++の絵本 第2版 C++が好きになる新しい9つの扉
株式会社アンク (著) ¥1,922
「C++で何か作ってみたい」「本格的言語をマスターしてみたい」という方の
要望にも十分こたえられる一冊です。オブジェクト指向の概念や最新のC++の
機能もフォローし、プロでも通じる本格的プログラミングの世界に一歩を
踏み出していただけます。
C言語/C++の作成手順について
それではここから、C言語/C++の作成手順について見て行きましょう。
C言語/C++は次のような手順を踏んで作成されて行きます。
- ソースプログラムの作成
- コンパイル
- コンパイル済みのプログラム実行
おおよそこのような工程を経て、C言語/C++によるプログラムが実行されます。
開発環境設定〜ソースプログラムの作成
お使いの環境はWindowsでしょうか?
でしたらVisual Studioをインストールしましょう。
Windowsのページに行くと無料で配布していますので、インストールできます。
2018/8/18現在インストールできるVisual Studioは2017です。
個人の開発に利用する場合は無償でダウンロードできるVisual Studio Communityが利用できますので、そちらをインストールしてください。
MacやLinuxをお使いの方はgccが、あらかじめパソコンに入っているので何もしなくてもC/C++が動くはずです。
テキストエディタでもメモ帳でも構いませんが、C言語のファイルを作る場合は「.c」、C++の場合は拡張子を「.cpp」にします。(”main.XXX”で保存)
サンプルとしてお決まりの「Hello World」のコードを記載します。
#include <stdio.h> int main() { printf("Hello World"); return 0; }
#inclede<iostream> int main() { //Hello World!! std::cout << "Hello World!!" << std::endl; }
コンパイル〜実行
WindwsでVisual Studioを使っている場合は以下の手順でコンパイルとリンクを行います。
画面上部の[ビルド] → [ソリューションのビルド]
するとmain.exeというファイルができるのでそのままコマンドを入力して実行
[デバック] → [デバックなしで開始] または Ctrl + F5 を押す。
実行結果は以下になるはずです。
「Hello World!!」
Macの場合は以下のコマンドをコンソールで実行
gcc main.c -o main.o または g++ -o main.cpp hellowold
するとホームにmain.oやhelloworldというファイルができるはずなのでターミナルから
.main.o または ./helloworld
と実行。実行結果は同じく「Hello World!!」となるでしょう。
まとめ
今回は、様々な言語の元になっており、元祖プログラミング言語とも呼べる C言語/C++について解説しました。
古いというのは、あくまでもその歴史で、決して「既に利用価値がない」という意味ではありません。むしろ、IoTなどの普及により、組み込みプログラミングに用いられるC言語やC ++言語に対する需要が高まっています。
C言語の利用シーンを考えてみると、説明しましたとおり生活の身の回りには欠かせないと言っていい程、使用されているのです。ゲームなどの分野でも、UnityやC#やJavaなどの言語が普及しているにもかかわらず、「最後にC ++が必要」という認識があります。
その一方で最初に学ぶには難しく、難易度の高い言語ですが、汎用性の高い言語とも言えます。ゲームの開発から、生産性ソフトウェアの開発など、幅広い分野で活躍することができるでしょう。