Javaプログラマの趣味ブログ

勉強の記録。基本的にUnityとC++の勉強をしてます。

Hello World!

今回はプログラミング学習の基本、Hello Worldについて解説します。 

Hello Worldはどのプログラミングの解説書でも必ず最初に行う儀式みたいなものです。

※環境構築やコンパイル方法については記載していません。

 WindowsであればVisual StudioMac OSであればXcodeでやるといいと思います。

Visual Studio

qiita.com

 

Mac OS

qiita.com

 

 

今回はCとC++の違いを実感するため、

CとC++Hello Worldを書いて、ちょっと比較してみましょう。

 

 

CでのHello World

 

f:id:faule:20190513013641p:plain

1行目はライブラリの指定です。

standard input outputの略になります。

入出力に関するライブラリです。

この中に入っている処理(今回だとprintf)を使いますよ、という宣言なので、今回はあまり理解する必要はないです。

 

2行目ではC言語ではデフォルトでString(文字列)が設定されていないため、

typedefでchar配列として型Stringを定義しています。

 

プログラミングをやっている方は4行目のmain(void)に

違和感を感じる方もいるかと思いますが、

Cで引数なしをmain()と書くのはご法度です。

この記載では引数として可変長変数を取るという書き方になるためです。

 

また、6行目でprintfで%sを使ってString変数の位置を指定しています。

ちょっとわかりにくいですね。

例えば""の中身を"strの中身は%sです¥n"にした場合、

「strの中身はHello World!です」と表示されます。

¥nは改行コードというもので、ここで改行しますよ、という意味です。

試しに外してみると改行なしで表示されるので一瞬「は?」となると思います。

僕はよく改行コードを忘れて忘れて「は?」ってなってます。

ちなみにintだと%d、charだと%cを使って変数の位置を指定するため、

ただのコンソール出力でもC言語はプログラミング初心者には非常に優しくないです。

 

 

では、C++で同じ処理をする場合はどうでしょうか。

 

C++でのHello World

f:id:faule:20190513013647p:plain

C

1行目は先ほどと同じでライブラリの指定です。

iostreamはinput output streamと覚えるといいと思います。

入出力に関するライブラリです。

 

2行目はnamespaceを指定しています。

namespaceはフォルダの構造をイメージしてもらえるとわかりやすいと思います。

今回ですとiostreamの中のstdに入っているcout(console outputの略です)を使いたいため、

本来だと6行目にはstd::cout()(「std::」はstdの中の、という意味です。iostreamは1行目で宣言されていますね)を使う必要があるのですが、

namespaceを宣言することでstdの部分を省略しています。

試しに2行目を消して6行目にstd::coutと書いてみるといいかもしれません。

 

C++では標準でstringが定義されているため、

CのようにtypedefでStringを宣言する必要はありません。

Cにおける文字列の扱いはものすごく難しいので、

僕としてはC++はCの改良として非常にありがたく思っている部分です。

(Stringはtypedefの定義通りchar配列(メモリへのアドレス情報)なので、

Cでは扱うのにポインタに関する深い理解と注意が必要です)

 

Hello WorldプログラムでCとC++で大きな違いが現れているのが6行目です。

C++では%dのような迂遠な書き方をせず、strだけで変数を理解してくれます。

非常にありがたいですね。

ちなみに普通の文字列と一緒に出力したいときは、

cout << "strの中身は" << str << "です" << endl;

と書くことで出力することができます。

endlは改行(end line)を意味しています。

 

 

さて、Hello Worldプログラムを使ってCとC++の違いを説明してみましたが、

どうだったでしょうか。

正直プログラミング初心者の方だとわからない単語も多かったかもしれませんが、

わからない単語はググって調べる、というのはプログラマの必須スキルなので、

わからない部分があった方はググってみて頂けると成長に繋がると思います。

 

ちなみにライブラリの部分についてはわからなくても問題ないです。

大体の技術書で最初は「おまじないです」の一言で済ませられている部分なので。

 

わからない部分があったらコメントで気軽に質問してください!

また、記事で間違っている部分があったらご指摘をいただけるとありがたいです!

 

今回は以上になります。

次回はプログラムに自分の任意の値を入れる方法について書きたいと思います。

 

では、また明日!