わたしと技術とマネジメント、およびゲーム

ゲーム制作記アンドゲーム随筆

C言語を学ぼう①

f:id:choice0316:20170830113631p:plain

 

ブログのアクセスを伸ばす方法を調べたところ、「人が気になっている、有用な情報を発信せよ」と書いてあったので、

 

C言語を教えていきたいと思う。

 

なぜC言語なのか。

 

C言語しかできないからである。

 

C言語とはなにか。

そのあたりはWikipediaを参照していただきたいが、かいつまんで言うと

 

・けっこう昔からある言語

・世の中のほとんどの言語のもとになっているので基本的になんでもできる(多少語弊があるが)

・コードを書く量が多いので多少めんどくさい

 

現在C言語が使われる分野は組み込み開発である。組み込み開発とは、製品(信号機、炊飯器、自動車、とにかく人が作った機械全部)を制御することだ。

 

たとえば、炊飯器で朝6時にご飯が炊けるようにセットするとしよう。米を研いで、釜を置く。ふたを閉める。時間ボタンを6回押す。予約。緑色のランプが光る。

こんな工程だと思うが、時間ボタンが一回押されたら時計が1時間進む。予約ボタンが押されたら緑色のランプを点灯させる。

 

このあたりの命令はC言語で行っている(ことが多い)。さらには、時間が近づいてきたら、炊飯器を温めて……というそのほかの制御も行っている。

 

つまらない?

 

まぁ、これからプログラミングを始めたいと考えている方はC言語から学ぶことをおすすめする。アプリを作りたい。ゲームを作りたい。といろいろな目的があると思うが、C言語でまずはプログラミングとはなんなのか。アイディアを形にするにはどうすればいいか。コンピュータはどういう気持ちで実行しているのか。というのが、C言語ならわかりやすいと思う。

 

というわけで、前置きはこれぐらいにして、さっそくやっていきたいと思う。

まずは環境構築だが、

 

そんなもん糞喰らえだ。

 

C言語をやるためにやれLinuxインストールしろだ、コンパイラはどれを使えだなんだかんだよくわからないことを教えようとする人がいる。

これからプログラミングをしようと思っているのに、プログラミングをする前の段階でつまずいてしまったらやる気がなくなるではないか。

 

安心してほしい。俺は初心者の味方だ(というか俺が初心者だ)。

 

というわけで今回は以下のサイトを使います。

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO

 

このサイトの緑のボタン、「コードを作成を無料で試してみる」をクリックしてみてほしい。

真っ黒な画面が出てきたと思う。

さらに真っ黒画面上部の緑のボタン(Swiftと書かれているだろうか)にマウスを合わせて、Cを選んでみてほしい。

 

これで環境は出来上がった!

 

正直言って、C言語で何かを表現するのはとても難しい。文字の出力が精いっぱいだ(一応画像を出したりもできるが、とても高度な技術になるし、それならもっと簡単に出来る言語がある)。ここは基礎と割り切って、環境はオンラインで済ませてしまおう。そのあとで自分のやりたいものをやるために勉強していけばいい。

 

#include <stdio.h>
int main(void){
// Here your code !

}

 

今、こんな感じで黒い画面に色とりどりの文字が並んでいると思う。

多くの参考書には「これはおまじないだと思って今は気にしないで」と書かれていると思う。

 

それはファックだ。

 

おまじないという言葉で何度挫折したかわからない。確かに何も知らないのにこれを理解するのは大変難しいが、それでも書いてあることは理解したい。

というわけでひとまず、以下のコードを書いてみてもらえるだろうか。

 

#include <stdio.h>
int main(void){
    printf("こんにちは");

 

    return 0;
}

 

// Here your code !は消してもらって構わない。//がついている文章は、コメントといって、この行はこういう意図で書いてますよ~というメモ書きを残したりするために使われるものだ。実際のプログラミングには影響しない。消しても残しても問題ない。

また、改行や字下げ(インデント、tabキーを押すと4マス分スペースが入る。4回スペースキーを押してもOK)は好みでやってもらって結構だ。命令の途中で改行されると動作しないので注意だが、基本的に見やすく書いてもらえればよい。

通例として、{}の中は字下げをするとよいとされている。

 

また、大きな注意点として、「C言語は大文字小文字を区別する」ことを覚えていただきたい。PRINTFとprintfとPrinTFはすべて違うものだと認識してしまう。

 

ちなみに今このコードを書いてくれた素直な方たち。

 

コピペしてないよね?

 

コピペはできるだけやめてほしい。コピペでは覚えない。手書きが望ましいが、それはあまりにも面倒なので、せめて手打ちでやってもらいたい。何度も何度もコードを書いていくことで覚えていくし、リズムをつかめるようになる。

 

そして黒画面下の実行ボタンを押すと「こんにちは」が表示されると思う。

 

さて、コードの解説をしていこう。

 

#include <stdio.h>

これはなにか。#とか<>とか、あまり使わない記号が出てくるが、これは書き方のルールだと思ってあきらめてほしい。アメリカの方の人が作ったルールなので従わなくてはならない。

 

さて、include。日本語で言うと「含む」。つまり#include<○○>は「○○を含みます」と言っている。

○○とは、stdio.h。「こんにちは」が表示されていない人はここを「studio」と書いたのではないだろうか。スタジオではない。エスティーディーアイオーと読む。

 

なにそれ?

 

stdとはスタンダード、標準ということである。ioはインプット、アウトプット、入出力のことである。.hとはヘッダーファイルの拡張子。

 

ここまでをまとめると、#include <stdio.h>は、「標準入出力を司るヘッダーファイルを含む」という意味になる。

 

わからねぇ。

 

もっと噛み砕いて説明するが、感覚的に説明するので、「厳密には違う」ということを理解しておいていただきたい。とりあえず現状の知識では完全に理解することは難しいのである(だからおまじない扱いなのだ)。

 

標準入出力とは何か。

 

コンピュータはキーボードで入力され、モニターに表示されることを「普通」と考えているらしい。つまり標準入出力とはキーボードで書いた内容をモニターに映しますよーということだ(当然標準ではない入出力もある)。

 

そしてヘッダーファイルとは何か。

 

C言語は命令だけでは動けない。たとえば信号機を青く光らせるために何千行書いても、その信号機の機種に合ったヘッダーファイルがないと動かない。ヘッダーファイルはいろいろな機種が動くように命令したり、人間がプログラミングをたくさん書かなくても済むようにあらかじめコマンドを用意しておいて、コマンドを書けばそのとおり動くようにしたりする、頭脳なのだ。

 

つまり、自分が書いたプログラミングは、ヘッダーファイルの中身を読み取ってから機械だったりモニターだったりに出力していくのだ。

 

printfというコマンドもstdio.hというヘッダーファイルに入っている。先人が知恵を絞って、printfと書けば、文字が表示されるようにヘッダーファイルの中身を一生懸命プログラミングしたのである。頭が下がる。

 

説明が下手だが、伝わっているだろうか。

 

ではまとめてみる。

#include <stdio.h>は標準入出力を司るヘッダーファイルの中を読み取るという行為を含む。それによってprintfといったさまざまなコマンドを使えるようにする。

 

と、この1行で宣言しているのである。

 

それでは次に行こう。

 

と思ったが、長すぎるので、次回へ。

 

 

苦しんで覚えるC言語

苦しんで覚えるC言語