![見出し画像](https://assets.st-note.com/production/uploads/images/173844119/rectangle_large_type_2_9df66f569c610577d09754d59942e21e.png?width=1200)
第六話 C言語編、開始
さて、今回からC言語につてい触れていこうと思う。
なぜそのような昔の言語を?と感じるかもしれないが、C言語は
「コンパクト」「速い」「何でもできる」のが特徴だ。
コンピュータ言語を一から学ぼうとするのは、外国語を習うようなもんだと思えばいい。
大げさに聞こえるかも知れないが、今までの日本語の常識は一切通用しない。
ざっくり説明すると、以下分類で構成されている。今は分からなくていいので言語には文法があり、法則がある事を理解していこう。
「記憶、読み出し」
「演算」
「繰り返し」
「分岐」
「命令」
また、これらの構成をより高度に使いこなすために
「アドレス指定」
「関数」
「構造体、共用体」
「プリプロセッサ」
聞きなれない言葉に関してはある程度Webで検索してみて欲しい。上記を全て使いこなしてようやく半人前。といったところだろうか。
単語は知っていても、文章にならなければ意味がなく
コンピュータ「言語」であるので、C言語のルールに則った構造で上記を使いこなす必要がある。
これが、プログラムを書くという事だ。
C言語は「関数」と呼ばれる処理の区切りの集合で構成されており、ここでは最も簡単な一つの関数で作成されたプログラムを見てく事とする。
では早速行ってみようではないか!
C言語の基本構成は、*.cというファイルがソースファイルを指し、*.hというヘッダファイルが定義を行うファイルを指す。ここでは定義は使用せずソースファイルだけでプログラムを組んでみよう。以降はUbuntuで作業を進めていく。
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
上記をテキストエディタで作成、Ubuntu上の自分のワークフォルダに「test.c」として名前を付けて保存し、cdでそのフォルダに移動後にコマンドラインから
$ gcc -Wall -o hello test.c
と実行すると、何やら「hello」というファイルが出来ているはずである。
そのファイルを実行してみよう。
$ .hello
これで、PC画面に「Hello World」が表示されたはずである。
一体何が起こったのか、分かったであろうか?
まず、プログラムを書く動作を見てみよう。
先ほど紹介した文言を使用していくので、追いかけながら見て欲しい。
#include <stdio.h>
C言語標準ライブラリのヘッダファイルを取り込む。(stdio.hはあらかじめLinuxが用意しているgccが保有している「スタンダートインプット、アウトプットライブラリ」を利用するためのヘッダファイルである)この機能を取り込む為の「命令」が#includeである。<>の場合は標準ヘッダを指し、""の場合はユーザーが作成したヘッダを指す。
int main()
integer型の数値を返却するmain「関数」を作成する。
C言語が実行する最初の「関数」を指し、例外を除いてこの関数名がないとC言語は成り立たない。
printf("Hello World\n");
printf()という「命令」で"Hello World"を表示させる。
標準C言語ライブラリを#includeすることで使用できるようになる表示ライブラリ。ちなみに\nとは文字を表示後、改行してほしい。という意味を持つ。
return 0;
表示した結果は0としてmain関数を終了する。
この関数が終了するときにint型の数値を返却する。という意味である。したがって構文であるreturn に0を入れて終了する。
日本語風に言うと
「今から ハーローワールド を表示するで」
「main Hello World printf」
こうなるわけである。
これで一つの「命令」を実行したプログラムの完成である。
ただ、これだけではただのテキストで書いたプログラムであり、
それらを前述のgccを使用して「コンパイル」する事でC言語→機械語に翻訳しているのである。
コンピュータはテキストを読み取ってはくれない。だが、機械が分かる言語を人間が作るのは非常に困難である。このジレンマを解消するのがコンパイラであり、プログラムを機械語に翻訳して機械が理解できる「うごくモノ」に変換してくれるのだ。
Linuxには標準でgccというC/C++コンパイラが用意されているので、無料で使いたい放題だ!
さて、これだけではプログラムとして成り立たないのはわかるだろうか?
組込みのプログラムは常に何かを監視している。と思ってよい。
例えば、
・今ハードの温度は?90度を超えたら警告してシャットダウンだ。
・ユーザーからボタン押されたぞ。Aを実行だ。
など、常にハードを監視しながらユーザーから操作や自動的に行う動作を判断して、条件によって分岐を行い、それらを一定周期で「繰り返し」ながら、動いているのである。
さて、これはC言語を始める最初のステップであり、人生における小学一年生の入学式のようなものだ。
この後にはそれはそれは高度な実装方法が待ち受けているのである!冒頭にも言った「なんでもできる」に期待して欲しい。
私が皆に言える事は、ただ一つ。母国語の概念を取り除くのだ!
プログラムができる、できない人の差は「考え方が違う」事が原因と私は思っている。脳がプログラム向けにアップデートされていないのである。
日本語で考るのではなくC言語で考えれるように「使って、使って、使いまくって」慣れていくしかないのだ!
組込みはロマンだ!C言語もロマンだ!
補足:
命令の後に ”;” が付いているのは、そういう決まりだからである。
関数が{}でくくられているのは、そういう決まりだからである。
つまり、覚える事も大事なのである。
疑問に思った事はそのままにせず、必ず調べながら進むのがとても重要という事を覚えていておいて欲しい。