3.C言語をターミナルで実行する
いよいよ実行です。
まず、ターミナルを開きます。
ターミナルは、「Finder」→「アプリケーション」→「Launchpad.app」→「その他」の中にあります。
やることは以下のことだとわかりました。
1.プログラムファイルを保存した場所に移動する
2.保存したプログラムファイルをコンパイル(イメージ:機械語に翻訳)する
3.コンパイルしたファイル(翻訳されたもの)を実行する
こうしてみると、簡単そうにみえますが、意味もわからずやってもたいていうまくいきません。一つひとつ調べながらここまできましたが、最後、またなぜかうまくできません。
私はここまでくるのに相当の根気と気力を使い果たし、息も絶え絶えになってしまいました。もう当初の簡単に「できたよ〜」と息子に告げるというもくろみは夢幻となり、逆に息子に助けを求めるより他ありませんでした。
ここから、息子にバトンタッチです。
まず、エディタで書いたものを保存した場所に移動します。Desktopに保存したのでそこに移動します。
$ cd ~/Desktop/
ここで、~/とは、ホームディレクトリという意味です。
参考:http://wa3.i-3-i.info/word13657.html
次に、コンパイルです。gccコマンドで、○○.cをコンパイルします。○○.cは保存したときにつけたファイルの名前で、C言語を示す末尾である.cとなっている必要があります。hello.cとつけたとして、以下でコンパイルします。
$ gcc hello.c
コンパイルされたファイルは、a.outという名前でできているので(ここで別の名前をつけるやり方もある)、確認するには、lsコマンドというもので確認してみます。
$ ls
すると、できていればa.outというものと、先に保存しておいたhello.cも見つかります。
そして、最後実行です。./a.out と入力します。
$ ./a.out
実行するには、ファイルのパス名を入力すればよいので、./というのは、「相対パス」で同じ階層にあるからです。これも失敗してわかったのですが、元のプログラムファイルと、コンパイルしたものは、同じ階層にある必要があります。フォルダを作っておいて、その中に二つとも入れるようにすると実行しやすいかもしれません。
相対パス指定のお約束
・同じ階層にあるものは、そのままファイル名か「./ファイル名」
・下の階層にあるものは、「./フォルダ名/ファイル名」
・上の階層にあるものは、「../ファイル名」
・2階層上にあるものは、「../../ファイル名」
・1階層上にあるフォルダの中のファイルは、「../フォルダ名/ファイル名」
参考:http://www.shoshinsha.com/hp/1hour/know/pass.html
すると・・ターミナルに
Hello, World
の文字が!!やったー!思わず、息子も私に抱きついてきて、二人で喜び合いました。
たった一行出すのに、こんなに苦労&感動するなんて・・
息子は、ラズベリーパイを少しやっていたせいか、この辺りのことをなんとなく理解していて、私よりスムーズに理解していました。遊んでいるだけかと思っていたんですが、やっぱり勉強になるんですね。
めでたし、めでたし。
他に参考にしたサイト
http://www.gi.ce.t.kyoto-u.ac.jp/user/susaki/c/kihon_compile.html
2.エディタに書いて保存する
プログラミングです。エディタに以下のように入力します。
#include<stdio.h> int main() { printf("Hello, World\n"); return 0; }
意味:
#includeとは、ヘッダファイルと呼ばれるファイルを読み込むときに用いる宣言。これで、stdio.hというファイルを読み出している。
".h"は、C言語のヘッダファイルの拡張子。基本的にC言語のプログラムはこの宣言から始まる。
そのあとは、以下のような関数の形になっている。関数とは、一連の処理をする単位のこと。
型 関数名(引数) { 処理; ... }C言語には必ずひとつの main 関数が必要で、main 関数はプログラム実行時に一番はじめに呼び出される。
- 型 int
「int」は整数型なので、この関数を実行すると何かしらの整数値を返します。
- 関数名 main
このサンプルには関数がひとつしかないので、関数名は「main」になります。
- 引数 void(省略されている)
「void」は引数がない場合に使います。この関数は引数を取りませんよぉーという意味です。そのため「void」を省略し「main()」と記述してもOKです。- 処理 return 0;
「main」関数は「int型」なので、整数値「0」を return で返します。
これは、システムにプラグラムが正常に終了(ステータスが「0」)したことをお知らせするために使用します。
・文字列の出力には printf 関数を使う。printf("文字列");
※ printf関数は ヘッダーファイル stdio.h を読み込んでないと利用できない。
参考:http://c-lang.sevendays-study.com/day1.html
https://webkaru.net/clang/int-main-void/
https://webkaru.net/clang/header-hello-world/
そしてこれを保存します。これも最初適当にやって失敗しました。
保存した場所を覚えておかないといけません。このあと、ターミナルで、保存した場所に移動するからです。
それから、名前にも注意しなければなりません。コンパイルのときにわかったことですが、名前は自分の好きなものでいいですが、c言語であることを示す.cまで消してしまうとコンパイルできません。ファイル名には.cを付けておかなければなりません。
とりあえず、わかりやすいように、Desktopに保存しました。
参考サイト:https://webkaru.net/clang/mac-gcc-compile/
つづき→3.C言語をターミナルで実行する
1. C言語の開発環境をつくる
プログラミングなので、エディタに書くことはわかりましたが、実行の仕方がわかりません。
調べたところ、
1.エディタ に書いて保存して
3.ターミナルで実行 をする
をすればよいことがわかりました。
エディタとは、パソコン上でメモやプログラムを書くことのできるソフトのことです。
エディタに書いたプログラミング言語を、機械で実行できる機械語に翻訳することをコンパイルといい、そのソフトをコンパイラといいます。参考:https://employment.en-japan.com/tenshoku-daijiten/14875/
ターミナルとは、命令を打ち込んで実行させることができるところ、と理解しました。参考:https://www.sejuku.net/blog/10977 https://techacademy.jp/magazine/5155
エディタは何でも好きなものでいいので、私は、Sulime Textがあるので、それを使うことにしました。
コンパイラはmacなので、X-codeをインストールすればgccというコンパイラがインストールされるそうなので、X-codeをインストールしました。X-code
ターミナルは、「Finder」→「アプリケーション」→「Launchpad.app」→「その他」の中にありました。
ここまで調べて、C言語というものがどういうものか、ほんのすこ〜しだけ、わかりました。
つづき:2.エディタに書いて保存する
0. はじめてのいきなりC言語
息子から、これをやってみてと言われました。「これならできるんじゃない?」と息子は言います。
以下のプログラムを入力・実行してみましょう。
#include<stdio.h> int main() { printf("Hello, World\n"); return 0; }実行結果HelloWorld.
「わかった、やってみるよ!」(書いてあるとおりにやればいいんだからちょちょいのちょいよ!)と返事したのが大間違い。はっきり言って、勉強しようとか、そういう気持ちはゼロでした。「できたよ〜」と軽く返事がしたかっただけなのです・・
しかし、これが悶絶の始まりでした。
・・結果としては、この実行結果を出力するのに、合計3時間かかりました。「入力・実行」と、たった4文字ですが、どこでどうやって実行すればいいのかがわからんのです!
できる人にはバカみたいな話だと思いますが、しかしこれをやっていけば否応無しにファイルの構造だとか、実行されるとはどういうことなのか、実際は何をやっているのか、すこしずつでもわかっていくということがわかったので、これも息子から記録に残しておいてよと言われたので、書いておくことにしました。
つづき→1.C言語の開発環境をつくる