大学を合格してから始めるwindowsでプログラミング 2日目

どうもこんにちは、昨日書いた記事がいきなり100以上のいいねが付いてきてかなりびっくりしているしゃーまんです。最初の投稿というわけで書くのにも結構時間がかかって、苦労しましたが、好感触のようで何よりです。

というわけで今日からバリバリ書いていこうかなと思います。

昨日の記事はこちらです。

大学を合格してから始めるwindowsでプログラミング 1日目

本日のメニュー(原文ママ)

  • power shellに慣れる
  • 簡単なプログラムを書いてみる
  • コンパイルして動かす

ということになりそうです。それではやっていこうかなと思います。

その前にMSYS2を導入する

昨日の記事にSSWさんやmattnさんやspiegelさんなどいろいろな方がコメントをつけていただきました。どうやら私が昨日入れたMinGWはとても古いソフトで、今これを使うというのは微妙ということでした。

調べてみると、MSYS2というのはターミナルエミュレーターというもので、私が使っているpower shellよりも数段使いやすいそうです。

それ以外にもコマンドだけでソフトを入れることができたり、シェルというものをいじることができるそうです。

大学ではそれなりに最新のものを使用するでしょうし、ターミナルが主らしいので、MSYS2を導入することにしました。

MSYS2公式ページから64bit 版をダウンロードしてきます。(msys2-x86_64~ とかいうやつ)

ダウンロードしてexeファイルを起動、インストールしました。

あとは公式ページのインストールガイド的なものを見ながら設定しました。

最初からインストールされているのはどうやら古いパッケージなようで、これで最新のものにアップデートされます。

pacman -Syu

するとこんな画面になって、アップデートされていきます。

pacmaninsta.jpg

終わった後はMSYS2を再起動して、再び

packman -Sy

でアップデートします。

アップデートが終わったらとりあえずはMSYS2の設定は終わり。

すべてが最新だとこんな感じになるはず。(僕の環境ではこうなりました)

packman.jpg

ここから改めてC言語の環境設定をしていきます。

参考にさせていただいたのはこちらです。

http://text.baldanders.info/remark/2016/03/gcc-msys2-1/

MSYS2にいろいろなソフトを入れるためのpacmanというパッケージマネージャーが必要みたいでした。pacmanというのは調べてみたところ、linuxというOSのパッケージマネージャーみたいでした。

pacman command.jpg

参考にさせていただいたサイト様からpacmanのコマンドを拝借いたしました。

これを使って環境構築していきます。

最初にgitというものを入れました。gitについても全然わからなかったので色々調べました。

どうやらgitというのはプログラムなどを管理するツールの一つらしい。ただただプログラムを置いておくだけでもいいけれど、もっとすごいのはこれをバージョンで管理できるということ。

一人でプログラムを書いているとき、バグが出て、直しているときに結局訳が分からずごっちゃになってしまいました。そういう時にこのgitが便利、gitは今までの状態を記録しているので、以前にプログラムを書いた状態に戻すことができるみたいです。

また、これ以外にもほかの人と一緒にプログラムを書くのに便利だそうで。ブランチという概念があり、二人がAとBというプログラムを書いて、実際にgitの上でプログラムを結合することもできるそうで、プログラミングをする人必携のものらしいです。

githubのアカウントも作りました。

gccのインストール

どうやらC言語のコンパイラはgccというみたいだったのでこういう感じにしました。やっていることは先ほど参考にさせていただいた方のページです。

pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

でgccのインストールが開始されます。終わったら動作確認をしました。

MinGWの32bit版、64bit版を立ち上げて gcc -v を打ち込みます。

画像のような文字が帰ってくればいいらしいです。

terminalgcc.jpg

コマンドに慣れる

どうやらプログラミングは、マウスで色々動かすというよりも、MSYS2のようなソフトにコマンドを打ち込んでやっていくらしい、マウスでファイルを操作するのには慣れていたけれど、コマンドとなるとめちゃくちゃわからなかった。とりあえず調べた中で日常的に使用するのはこんなものらしい。

  • mkdir フォルダを作成するコマンド
  • cd フォルダを移動するコマンド
  • cp フォルダやファイルをコピーするコマンド
  • mv ファイルやフォルダを移動するコマンド
  • pwd 現在いるフォルダまでの階層を表示してくれるコマンド

とりあえずここら辺を調べました。多分これをいじればなんとかなると思いました。

絶対パスと相対パス

パソコンの中のファイルは、おおもとのフォルダ(ディレクトリともいう)から、派生してファイルが保存されているみたいです。

Aというファイルまでのフォルダの道的なものをパス(Path)と言うそうで、これを指定する方法に相対パス絶対パスというものがあります。

絶対パス ... 絶対パスは一番大元のフォルダからのパス
相対パス ... 相対パスは現在いるフォルダから目当てのフォルダまでのパス

みたいです。例えば、cdの場合は
cd root\A\B\C\
とすればCまで移動できます。これは絶対パス、おおもとのrootから移動しました。

相対パスの時は例えば、CというフォルダにいるときにBに移動したい、けどcd root\A\Bと書くのもめんどくさいので

cd ..\

で一つ上のフォルダに行けるみたいです。

今日一番難しかった概念がここだった気がします。

とりあえず、プログラミングをしていくフォルダを

mkdir C-gengo

として作ってみました。この中で僕はプログラミングをしていこうと思います。

プログラミング

初めてのプログラミング、どうやらこの界隈はHello Worldと表示させるのが通例のようです。調べてみましたがこんな感じなようです。

hello.c
#include<stdio.h>
int main(){
    printf("Hello World");
    return 0;
}

僕が生まれて初めて書いたプログラムです。atomで書きました。

c-hello.jpg

コンパイルするためには、MSYSで開ける場所にファイルを置いていなければいけないらしく、保存する場所がとても分かりづらかったです。とりあえず保存できました。

動作を確認します。

動作確認

コンパイルをします。コンパイルは

gcc コンパイルしたいファイル

でコンパイルができます。

そうすると a.exeというファイルが生成されます。これは実行ファイルと言われ、これが実際のプログラムみたいです。これを実行するには./a.exeとすれば動いてくれました!!!

helowa.jpg

生まれて初めてのプログラムが動きました。めちゃくちゃうれしい。

けど、なぜこうなって動いたかが分からなかったので、このhello worldのファイルを読み解いていこうと思いました。

コードについて調べる

hello.c
#include<stdio.h>
int main(){
    printf("Hello World");
    return 0;
}
  • #include

まず、#include<stdio.h>という行です。これはどうやら、プログラミングに必要な道具が入っているセットみたいなものらしいです。

ヘッダファイルというところに、プログラミング中に使用できる関数?が詰まっていて、この中に入っている関数を使用できます。

どうやらprintfという文字を表示させるのに必要な関数は stdioという中に入ってるようです。

  • int main

プログラミング言語というのは、上から順にプログラムが実行するらしく、このmainというものは一番最初に動く関数。ここで主にプログラムが動くようです。

  • printf

C言語で文字を表示させる関数、

printf("表示させたい文字");

で文字が表示されるらしい、文字の後ろに \nをつけると、自動的に改行がされます。(改行文字というらしい)

  • return 0

関数というものはよくある二次関数

y=x2+3x+5

みたいに、一つの数字を入れたらもう一つの答えが返ってきます。

C言語の関数も同じように一つの入力で一つの出力が返されます。

mainはどうやら出力だけがあるそうで、何もないときは0が出てくるそうです。

というわけで、このプログラムだけでも、いろいろなものを知ることができました。

今日のまとめ

MSYSはめっちゃ使いやすい。 powershellというものを最初は使っていたのですが、めちゃくちゃ難しかったです。しかしこれはpacmanというもので色々なソフトを簡単に入れられるようで、余計な設定も少ない感じがします。

今日はプログラムをバリバリやろうとしていましたが、MSYSの設定にてこずったせいで、hello worldだけで終わってしまいました。

明日からはもうちょっと踏み込んでいこうと思います。

あと、大学に行って行列が必要だと先生に言われた脅されたので、ぼちぼち行列などもやろうかなーとも思っています。

本日もここまで読んでくださり、どうもありがとうございました。

11contribution

ようこそプログラマーの世界へ!Hello World!

0contribution

同じくほぼ初学者です。
Mac等を使用しており、絶対パス・相対パスのところでなぜバックスラッシュなのだろうと思ってしまいましたが、Windowsだとバックスラッシュで表現するのですね...

勉強になりました。ありがとうございます。

MSYS2もどちらかというと古いので最近はBash on Ubuntu on Windowsを使うのが主流だと思います。
ちなみに行列の積を求めるプログラムは多重ループ&多次元配列の練習の定番だと思うので、慣れてきたらぜひ

881contribution

Hello Worldは世界で最もコンパイルされたコードでしょう。
応援してます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.