春から大学生（情報・工学系）の方へ2～プログラミング入門～（C++言語ってなあに？＋実行の仕組み）

# 春から大学生（情報・工学系）の方へ2～プログラミング入門～（C++言語ってなあに？）
## C++の「文法」が学習したい方は競技プログラミングサイトAtCoderをご覧ください
<font color="Red">
※アカウントの登録が必要となります <br>
（就活などでスコアを提出する場合もあるそうなので登録してしまってもいいかも）
</font>

https://atcoder.jp/contests/apg4b

<font color="Red"><br>
注：アウトプットとして、初心者に毛が生えた程度の知識で書いています。
記事の下のほうに、詳しい方からのご指摘が寄せられていますので、そちらもぜひお読みください</font><br><br>

先日投稿した「C言語」に関する記事
https://qiita.com/HaaSAtC/items/490d066bdbec8441a2f6
の続きになります。
今回はC言語の兄弟（子供？）ともいえる「C++」という言語についてさらっと解説します。
（実際に学習したい方はネットで「C++入門」などとググってください）
（「○○　入門」でググれば意外に体系的な情報が出てきます。）
（大学の授業に向けて予習したい人はぜひ覚えておいてね！）
（言語のバージョンに注意）
（C言語は長いこと仕様が更新されてないはずなので大丈夫だと思います）
（英語ができる人はYouTubeで~~ tutorialなどと検索するのもおすすめ。長い動画ばっかりだけどね）

# 対象読者
上に貼ったリンクの「C言語」についての記事を見てくれた人(５分くらいで読み終わると思います)

# お品書き
C++言語について軽く解説
C言語/C++のプログラムが実行される過程について軽く解説

# C++言語とは？
C言語と名前が似ていることからお察しの様に、大変よく似た言語です。
C言語の~~書きにくさ、とっつきにくさを解消するために~~文法構造を少々改善した言語です。そうは言っても、C言語とまだまだ似ているので１枚のプログラムでC言語とC++言語を混ぜて書くこともできるようです。
<font color="red">igiyさんにコメントで補足していただきました↓</font>
>C++はC with Classesという名前だったことから、もともとCにクラスの概念、つまりオブジェクト指向を付けた言語です。
言語の仕様としては、すべて把握している人がいるのか！？と言われるくらいの膨大なものです。

https://qiita.com/nomunomu0504/items/722a2771fef7d8038ceb
（↑初心者の方には難しいので読む必要はありません）
（後々大学の授業でやることにはなるかもしれません）
<font color="red">
taquさんの補足
</font>
>"C++の設計と進化"によりますと

>2.8 シンタックスの問題
Cのシンタックスとセマンティクスの厄介な欠点を修正することができただろうか？
中略
部分的に修正を試みたが、カンカンに怒ったユーザが文句を言ってくるので、すぐに元に戻したことが何度かある。

>2.8.3 シンタックスは重要か
私の意見としては、シンタックスの問題に熱心になりすぎてタイプの問題をおろそかにする人が多すぎる。

>少なくとも初期は "C言語の書きにくさ、とっつきにくさを解消する" 意思は強くないように思います.



# C++言語、C言語のプログラムが実行される過程について
C言語の記事で、C言語は最終的にコンピューターが読むため、0と1だけでできた機械語に翻訳されると書きました。（この作業をコンパイルと呼びます）
このときに翻訳作業をしてくれるアプリ（コンパイラ）がC言語とC++では共通です。
代表的なコンパイラとして以下の２つがあります
・gcc(gnu compiler collection, MinGWというパックに含まれる)
・clang(読み方は「クラン」)
大学の授業の最初の週にいずれかをインストールさせられると思います（環境構築）
MinGWはEclipse Pleiadesというパックにも含まれているのでそちらを入れた場合は「MinGW」という語自体は目にしないかもしれません
具体的にどのように文法が異なるのでしょうか
よく取り上げられる例を使ってご説明しましょう
プログラミングをするうえで、プログラムを書く画面（メモ帳やWordのようなものと思ってください）以外にも大事な画面があります。

それは「ターミナル」と呼ばれるものです。
（コンソール、シェルなどほかにも様々な呼び名があります）
（厳密に言うとそれぞれ微妙に意味が違うらしいんですが）
「ターミナル」は大抵プログラムの下に開く画面ですが、様々なことができます。
フォルダを開いたり、ファイルやフォルダを消したり...etc
Windowsにある黄色と青のファイルアイコンのアプリ（エクスプローラー）と同じ機能ですね（エクスプローラーはWindows＋Eで起動できます）
少し脱線しましたが、「ターミナル」はこれだけでなく、自分の書いたプログラムを機械語に翻訳する、翻訳したプログラムを実行して結果を得る（文字で出てくるものだけですが）こともできてしまいます。

では、どのようにしたらターミナルでプログラムを翻訳・実行することができるのでしょうか
gccコンパイラを例にして説明します。
まず、ターミナルを開いてください
（OSにも標準で入っていますが、授業でインストールする「IDE」や「エディタ」に付属しているものを使うように指示されるはずです）
（「IDE」や「エディタ」が分からない人はネットで種類や使い方を調べてみましょう）
（MicrosoftやGoogleなどの出しているものが出てくるはずです）
（よくわかんな～い、っていう人は以下を読むだけで結構です）
（授業で先生に指示されるまで待ってください）
gccの場合、ターミナルで書き終えたプログラムを保存した場所を開いて（開いたフォルダが表示されます）
gcc プログラム名.c
gcc プログラム名.cpp
などと打ち、Enterを押してください
自分の書いたプログラムにバグのない場合は
フォルダの中に「プログラム名.out」や「プログラム名.exe」などのファイルができているはずです（ターミナルに「ls」（=list）と打ち込んでEnterすると現在のフォルダの中身が見えます）
この翻訳作業についてはもう少し分解してみるとさらに細かい手順に分けられるのですが、そういった部分はご自分で調べていただくか（コンパイル　仕組み　詳しくなどで検索）
授業で教えてもらうのを待ってください。
おそらく実際にコンパイル（翻訳）をしてみるとエラーが頻発することでしょうが、その時はターミナルに表示された英語のエラーメッセージをネットにそのままコピペしてググってみてください。うまくいけば、ターミナルに何らかの結果が表示されるはずです。

# 用語についての補足
さて、難しい話が続きましたが、上で出てきた難しそうな用語について補足しておきます。

・ターミナルについて
「ターミナル（英語で中央の意）」はパソコンの画面に表示されて、主にキーボードの入力で操作するものですが、昔はパソコンの中に内蔵されているのではなく外付けの機械だったんだそう。その機械は「コンソール（端末）」と呼ばれていたそうで今でもターミナルの類義語として使われているそうです。「端末」と言えば、スマホやパソコンなどを思い浮かべると思いますが、「端」「末」という文字からわかるように「端っこ」を意味し、情報や電流の出入力（キーボードやディスプレイ画面、コンセントのことですね）ができる機械のことを指していた用語だそうです。現在はパソコンの中に取り込まれ、PCのキーボードで操作できるようになったから外付けの機械はなくなったんだとか。
ターミナルはキーボードからの入力で操作しますが、その際に用いるプログラミング言語？として「シェルスクリプト」というものがあります。調べていただくと分かりますが、WindowsとLinux系(Macなど)ではところどころ文法が異なっているのです。自分はWindowsを使っているのに、Linuxの文法でターミナルに打ってもエラーになるので気を付けてください。
WindowsだとPowerShellというターミナルが標準で装備されていますが、Microsoft社製のVisual Studio Code(VSCode)という開発環境をインストールするとCtrl+@でVSCode内でPowerShellを開いて使うことができます。
Macの場合は。。。ごめんなさいわからないので調べてください。

・Windowsのファイル管理アプリ「エクスプローラー」について
黄色と青のファイルアイコンのやつです。Windowsキー（キーボード左下のほう）＋Eで起動することができます。デスクトップには「ゴミ箱」として左上のほうにあると思います。
大昔のパソコンでは「ターミナル」を使ってファイル操作をしていましたが、あまりにも使いづらいのでマウスのクリックで使えるようになりました。これによって一般の方にもパソコンが普及していきました
（詳しくは「CUIとGUIの違い」などでググってみてください）

・「エディタ」と「IDE」とは？～プログラミングの開発環境の違い～
「エディタ」とは「テキストエディタ」とも呼ばれ、プログラムを書き込んでファイル化するためのアプリです。メモ帳（Notepad）の高機能版と思ってもらえれば大丈夫です。（実際頑張ればメモ帳でプログラムを書くことはできる）
「IDE」とは、「テキストエディタ」にさらに多くの機能を追加したものです。要はプログラミング用の何でもセットです。なんでもセットと書きましたが、その分容量は大きくインストールには時間がかかります。ただ、このプログラミング言語にはこのIDEさえあれば大丈夫、といった感じで本当に何でも同梱されているので一気に開発環境を整えたい人にとってはおすすめです。
エディタやIDEのインストールにはとても手間がかかりますし、少しでも間違えると動いてくれません。なので、インストールは学校の授業に沿ってやりましょう。今からでも勉強したい方は、エディタ名/IDE名　インストールなどで検索してもやり方は出てきますが、インストールしたものが授業でも使えるとは限らないので注意してください
（エディタやIDEごとに設定が異なるので、先生のおすすめするものにしておいたほうが無難）
（自分だけ違うエディタやIDEを使っていると周りと違うエラーが出てきて困ります）
以下に授業で使いそうな有名なエディタ・IDEを挙げておきます。
（ほかのものを使うことになったらごめんなさい）
エディタ
VSCode（Visual Studio Code、水色のリボン）Microsoft製
IDE
Visual Studio 2022（紫のリボン）　Microsoft製
Eclipse（Eclipse Pleaides）
AnacondaのJupyter notebook（Jupyter Lab）

・".c", ".cpp", ".out", ".exe"について～ファイルの拡張子～
初期設定だと見えませんが、エクスプローラーを開くとファイルの末尾には'.'から始まるアルファベットがついています。これはファイルの種類を表し、「拡張子」と呼ばれます。
確認してみましょう。
（Windowsの場合）
Windows+Eでエクスプローラーを起動
左上「表示」より右上の「ファイル名拡張子」にチェックを入れる
.exeや.outの場合はアプリケーションを表します。C言語やC++のプログラムを変換するとアプリになるわけです。エディタやIDEの本体、gccなどのコンパイラもエクスプローラーで探して確認すると.exeファイルになっています。ターミナルで使うgccやlsなどの「コマンド」は基本的にアプリ名と同じなのです。

# C++言語でのCG（コンピューターグラフィックス）
ディズニー映画とか特撮とかに出てくるあれです。
あれを大学のC++の授業でつくる場合があります。
C++ではなくC言語などほかの言語でやる場合もあります。
プログラミングでは「関数」を並べて処理を記述していくのですが、
（エクセルをやったことのある人ならわかると思います、おおざっぱに言えば、条件を入れると結果が出てくるやつです。数学の関数も同じですね、xを入れるとyが出てくる）
基本的にC言語やC++などのプログラミング言語にはCGを作るための関数が標準装備されていません。そこで、CG用の関数セットである、「OpenGL」をインストールして併用します。こちらも先取りで学習したい方は「OpenGL 入門」などでググってください。どこかの大学の偉い先生が書いたPDFが出てくると思います。
（CGを作るにはプログラミングの知識だけでなく、大学数学の「行列」の学習が必要となります）
<font color="red">
注：必ずしも「OpenGL」を使うわけではなく、プログラムを書かずに専用ソフトで演習を行う場合もあります。
</font>
https://secure.ritsumei.ac.jp/data.jsp?database=R198ciasVoice&id=571

# 最後に
長くなってしまいましたが、最後まで読んでくださってありがとうございました。
次回はC言語・C++言語に次いで大学の授業で扱われることの多い、「Java言語」について解説したいと思います。
初心者にわかりやすいようになるべく専門用語を避けましたので、ところどころ不正確な言い回しがあるかもしれません。その点はご容赦くださいますようよろしくお願いいたします。
<font color="red">
コメント欄で「よい議論がされている」とのことでご紹介いただきました
コメントしてくださった方、ありがとうございます。
至らない点を補足していただいておりますので、記事の下にあるコメント欄もぜひご覧ください
</font>

https://qiita.com/kai_kou/items/df87ebf338389a39062c#_reference-17ed1a931a7783eaf66f

次回：Java言語ってなあに？
https://qiita.com/HaaSAtC/items/4c114712a8f4400ef7ad