SSブログ
プログラミング ブログトップ

C言語でのプログラミング ~おまじない~ [プログラミング]

こんにちは、rollです。
本当は開発環境のインストールについて書こうと思ったのですが
訳あって、今回はこのブログでC言語でのプログラミングを勉強するうえで
C言語でプログラムを書くときの「おまじない」について書いてみようと思います。
覚えてもらいたい「おまじない」は2つです。

1つ目のおまじない ~main関数~


まず先に下のプログラムのソースコードをボーっと眺めてみてください。
書いてあることの意味は分からなくても大丈夫です。

(programming01.c)

#include <stdio.h>

int main(void){
    printf("Hello,World!!");
    return 0;
}

これも立派なプログラムです。
実行結果は下のようになります。

(実行例)
blog_programming01.png

このプログラムは「Hello,World!!」という文字列を表示して終了します。

1つ目の覚えてもらいたいことは
「C言語のプログラムの始まりは『main関数』である」
…と、いうことです。
main関数というのは

int main(void){
    printf("Hello,World!!");
    return 0;
}
の部分を言います。
C言語で書いたプログラムは、このmain関数から処理をスタートします。
なのでmain関数はC言語でプログラミングする上で
毎回必ず書かなければならないものなのです。
ごちゃごちゃ書きましたが下の部分を「おまじない」として覚えてもらえれば大丈夫です。

int main(void){
    
    return 0;
}


2つ目のおまじない ~#include <stdio.h>~


2つ目の覚えてもらいたいことは

#include <stdio.h>
についてです。
詳しくは(今は)書きませんが「文字の入出力」に必要なものなので
これも毎回書くものだと思ってもらえれば大丈夫です。



ここまで2つの「おまじない」を紹介しました。
1つ目は「main関数」
2つ目は「#include <stdio.h>」
まとめると下の4行になります。

#include <stdio.h>

int main(void){
    
    return 0;
}

この4行はC言語でプログラミングする上で重要なものなので
意味は分からなくても「おまじない」として覚えてもらえればと思います。
覚えられなければ適宜、上のソースコードをコピー&ペーストして頂いて構いません。

今回の記事の中で初めての言葉が出てきたと思います。
「main関数?」「そもそも『関数』ってなんだ?」
「『#include』って何?」「『return 0;』って何をしているの?」「『void』って何?」
それらについては追々記事にしようと思っていますのでお待ちいただければ…(汗)

それでは、今回はこの辺で。

コンパイル言語とスクリプト言語 [プログラミング]

こんにちは、rollです。
プログラミング言語には様々な種類があります。
「Java」や「C言語」「C#」「JavaScript」「Ruby」など世の中にはたくさんの言語があります。
でも、その多くはコンパイル言語とスクリプト言語の2種類に大別できます。

じゃあ、コンパイル言語ってどんな言語?

その名のとおり実行前にコンパイルを必要とする言語のことです。
コンパイラを使って機械語に変換するんでしたね。
関連する記事 : コンパイルやビルドという作業

じゃあ、スクリプト言語ってどんな言語?

スクリプト言語はコンパイル言語のように事前にコンパイルを行う必要がありません。
「それならどうやって実行可能ファイルを作るの?」
…それは、プログラムを実行するたびに必要な分だけコンパイルを行っているのです。
イメージしてみてください。
あなたは日本人です。仮に英語を話すことができないとします。
そんなあなたが、アメリカ人と英語で話さなければいけない状況になりました。
どうすれば良いのでしょうか?
…通訳を呼べばいいのではないか?
そんな発想が「スクリプト言語」です。
自分が伝えたいことを通訳を通して相手に伝える。
これで自分の意思を伝えることはできますね。
でも、通訳を通すぶん会話のスピードはスムーズにいかないですよね?
しかも同じ事を伝えたくても、また通訳を通さないと相手に伝わりません。
これと同じ性質を持っています。
この例えでいくとコンパイル言語は
「自分が伝えたいことを事前に翻訳して書類にまとめておく」ってところでしょうか。
事前に準備をしなければいけないので
変更が加わればその都度翻訳をしないといけないですが
一度翻訳が終われば同じ内容を話すなら
まとめた書類を読めばいいだけです。
会話のスピードはこちらの方が早いのは想像に難くないと思います。

ちなみに
「相手」 = PC
「自分が伝えたいこと」 = ソースプログラム
「会話のスピード」 = 実行速度
「翻訳」 = コンパイル(機械語に変換)
…にそれぞれ置き換えるとこの例え話も納得してもらえるのではないでしょうか?

まとめ

コン.パイル言語とスクリプト言語を比較したときに…
1.コンパイル言語のほうがスクリプト言語より実行速度が速い。
2.スクリプト言語はソースプログラムにエラーがあっても途中までは実行できるが
   コンパイル言語はそもそもコンパイルができないので実行ができない。

コンパイルやビルドという作業 [プログラミング]

こんにちは、rollです。
プログラミングを行ううえでコンパイルやビルドという言葉に出会うことがあります。

コンパイルとは

英語だと compile で「編集する」などの意味らしいです。
結論から言うと、コンパイルとは
「人間に理解しやすいプログラミング言語で書いたプログラムを
PCが理解できる形に翻訳する作業」と、とらえてもらえれば大丈夫です。
なぜそんなことをしなければいけないのかは、下に詳しいコンパイルの流れを
まとめてみたので読んでみてください。

コンパイルの流れを書いてみると
「コンパイラ」というソフトウェアを用いて、プログラミング言語で記述された「ソースプログラム」を
「オブジェクトプログラム」と呼ばれる中間形式に変換する作業。
ここまでを言います。

例えば「C言語」で下のようなソースプログラムを用意したとします。
(ファイルの名前 HelloWorld.c)


/* Author : roll */
#include <stdio.h>

int main(int argc,char** argv) {
   printf("Hello,World!!");  //「Hello,World!!」の表示
   return 0;
}


コンパイルでは、これをオブジェクトプログラムに変換します。
PCが上のソースプログラムをそのままの形で理解してくれれば1番いいのですが
残念ながらPCは「0か1か」でしか理解してくれません…。
これが俗に言う「機械語(マシン語)」というやつです。
PCに仕事をさせたいときは本当は機械語で指示しないと理解してくれないのです…。
ですが人間にとって数字の羅列で動作を指示するのはとても労力がかかります。
ここでコンパイラの出番です!
人間が書いたソースプログラムはオブジェクトプログラムに変換されます。
この変換の時点で既に機械語に変換はできています。
では、これで実行可能ファイル(ロードモジュール)はできているのか?
…あともう少し作業が残っています。
それが「リンク」です。
リンクについては下の「ビルド」の説明の中で書こうと思います。

ビルドとは

英語だと build で「仕上げる,組み立てる.」などの意味らしいです。
結論から言うと、ビルドとは
「ソースプログラムをコンパイルした上で実行可能ファイルを
生成するために必要なリンクを行うまでの一連の作業」
と、とらえてもらえれば大丈夫です。
なので、コンパイルとビルドの違いは
コンパイル = ビルド - リンク
ビルド = コンパイル + リンク

…ということですね。

ビルドの流れを書いてみると
上で書いたようにコンパイルを行った後に「リンカ」というツールを用いて
複数のオブジェクトプログラムや静的リンクライブラリを(必要に応じて)結合して
実行可能ファイル(ロードモジュール)を作る一連の作業。
ここまでを言います。

このビルドという作業を経てやっと
実行可能ファイル(ロードモジュール)が出来上がります♪
(上のソースプログラムの例でWindowsの環境だと HelloWorld.exe)
これで晴れてコンソールの画面で「Hello,World!!」の出力を確認できます。
(下の画像では一部加工処理を施しています)

HelloWorld.png


では最後にまとめです。

コンパイルとは
「人間に理解しやすいプログラミング言語で書いたプログラムを
PCが理解できる形(機械語)に翻訳する作業」
ビルドとは
「ソースプログラムをコンパイルした上で実行可能ファイルを
生成するために必要なリンクを行うまでの一連の作業」

初めてのプログラミングはどの言語を使うべきなの? [プログラミング]

この記事はプログラミングをしたことがない方を
対象に書いています。

おはようございます、rollです。
皆さんはプログラミングに興味はありますか?
プログラミングができると一般的に次のようなことができます。

・複雑な処理を記述することで、PCが(人間よりも)正確に処理を行ってくれる。
・(人間が同じ処理を行うよりもPCに任せたほうが)処理が高速。

どうですか?何かPCに仕事をさせたくなってきませんか?
例えば、今までに私が作ったソフトの中に次のようなもの(一部)があります。

・電卓(っぽいもの)
・メモ帳
・音楽再生ソフト
・ブロック崩し(ゲーム)

既存のソフトでは不満が残るところを
自分で作成したソフトで改善、改良して自分だけのソフトを作ることができるんです。
この「今自分が『ものづくり』している」達成感を味わえるのが
プログラミングの醍醐味ではないでしょうか?

じゃあ、プログラミングを勉強するのにはどんな流れで進めればいいのか?
私の答えとしては…
1つ目は、何を作りたいのか目標を決めること。(目標を決める)
2つ目は、その作りたいものに合うプログラミング言語を探すこと・知ること。(言語を決める)
3つ目は、作りたいものに適したプログラミング言語の文法・構文を知ること。(知識を蓄える)
4つ目は、勉強した文法・構文を使って実際に動かしてみること。(知識を行動に移す)
5つ目は、自分が納得するまで「書いては改善、書いては改善」すること。(言語に慣れる)
…この流れでいいんじゃないかな?って思います。

それではプログラミングの勉強を始めたいと思った時に何から始めればいいのか?
全くのプログラミング未経験の方なら
上の流れの1つ目にあたる「目標を決める」はいったん置いておいて
「C言語」というプログラミング言語を勉強することをお勧めします。
いきなり2つ目にあたる「言語を決める」に進んだのには理由があります。

C言語ってどんな言語なのか?

・C言語はUNIXという(^1)OSを開発する為に生まれた言語です。
・汎用性が高いので様々な目的に使われる(ゲーム開発や機器の制御など)。
・コンパイル言語である。(後日、解説の記事を書きます)
・プログラマ人口が多いのでコミュニティが多いです。

注釈(^1) Windowsなどシステム全体を管理するソフトウェアのこと。Operating Systemの略

以上、簡単ですがまとめてみました。
「C言語がどんな言語なのかは分かったけど、なぜそれを勧めるの?」
…と思われるかもしれませんね。
理由は簡単で「今使われている大多数の言語はC言語の概念・文法から派生しているから」です。
皆さんの中には「Java」や「C++」などの言語の存在をご存知の方もいることでしょう。
それらの言語では「データ型」や「配列」「関数」という概念がありますが
これらはC言語から派生した言語であるが故なのです。
つまり、C言語が理解できれば
他の言語を勉強するときも比較的楽に進めることができるのです。
…実はC言語に無くてJavaやC++には有る、概念や文法が存在したりします。
(「クラス」や「継承」「インスタンス」「コンストラクタ」など)
それらは必要になった時に勉強すればいいだけの話です。

長々と書きましたが「他の言語を勉強することも視野に入れてC言語を勧める」という事です。
といっても、C言語自体の文法は難しくはないので心配しないでください。
お決まりの文句があったりして、覚えることは多少あっても
理解することが難しいものではありません。

これから先、C言語を用いてプログラミングの面白さを伝えればと思います。
(プログラミングの面白さ = PCを自分の思い通りに動かす)
このブログでC言語を勉強する上での目標としては
「C言語の文法を一通り書いてみて動作を確認して
四則演算をしてくれるアプリケーションを作る」…にしようと思います。

もし、この記事を読んでC言語を勉強しようと思ってくれる人が増えてくれたら
これほど嬉しいことはありません。

次回はプログラミングの勉強に必要な 開発環境の準備に焦点を当てつつ プログラミング言語でも重要な部類に入る「データ型」について記事を書こうと思います。
訂正:
「開発環境の準備」の記事がしばらく書けなさそうなので
「初めてのC言語プログラミング~おまじない~」について書こうと思います。

ここまで読んでくださってありがとうございます。
それでは、また。
タグ:初めて C言語
プログラミング ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。