Help us understand the problem. What is going on with this article?

コンピュータの仕組みを勉強しながらC言語やろうぜ! #1

More than 1 year has passed since last update.

みんなC言語大好き?

大嫌い? あっそ.

C言語はコンパイル型のプログラミング言語です.コンピュータは機械語しか処理できません.プログラミング言語を含む自然言語から機械語へ翻訳することをコンパイルと呼びます.コンパイルするソフトウェアのことをコンパイラと呼びます.

C言語の導入方法

開発環境やコンパイラはいろいろあります.それらの種類を簡単にまとめます.あまりにも種類が多くて導入が面倒くさいので,オンライン・コンパイラを使います.以下は完全に蛇足なので導入したい人はどうぞ.

オンライン・コンパイラ

オンライン上でコンパイルできるシステムです.Googleで調べるとたくさん出てきます.

個人的におすすめできるのが,このコンパイラです.

https://www.onlinegdb.com/online_c_compiler

Paizaでもいいのですが,なぜか動かないことがあるので正直つらいです.以下完全に蛇足なので,本格的に導入したい人はそれぞれ調べてみてください.

統合開発環境

統合開発環境とは,楽に開発するためのソフトウェアです.コンパイルからデバッグ,テストまでありとあらゆることをサポートしてくれます.主な統合開発環境としては以下のものが挙げられます.

  • Visual Studio
  • Visual Studio Code
  • XCode

Macを使っている場合はXCodeが主流ですが,WindowsではVisual Studioが主流です.Linux使っている人はvimを推してくることがあります.

コンパイラ

  • Visual C++
  • Intel C++ Compiler
  • gcc

Visual Studioを使うと自動的にVisual C++を使うことになります.Intelに課金するともっと速くて省メモリなプロセッサに最適化されたプログラムをコンパイルできるようになります.Linux使っている人はgccを使うことになります.

最初のプログラム

最初のプログラムと言えば「Hello, World」なのですが,そもそも画面に文字を表示するというのは様々な説明をすっ飛ばしています.あまりよくはありません.ここで長々とprintfについて説明するよりも早く筆を置きたいので,最も簡単な何もしないC言語のコードを示します.

int main() {
    return 0;
}

このプログラムを実行すると,Program finished with exit code 0とコンソールに表示されます.「プログラムは終了コード0を伴って終了しました」という意味です.

このプログラムにはreturn文しかありません.return文では関数が終了したことを呼び出し元に通知します.main関数の呼び出し元はOSです.なので,OSにmain関数が終了したことを通知しています.

return文の文末にセミコロン;がありますが,これはプログラムの実行単位ごとにつけることになっています.最初はどこでつければいいのかわからないと思うので,基本的に1つの実行単位ごとにつける,ということを覚えてください.

main関数

main関数とは,プログラムの開始地点を表す関数です.

int main() {

この行ではmain関数が始まることを宣言しています.中括弧{}はC言語を使うと頻繁に見ることとなります.だいたい,ここからここまで,という意味です.一つのくくりを表しています.

intというのは終了コードが整数型になることを示しています.mainの隣に()がありますが,この括弧は関数の引数です.

$$ f(x) = y$$

みたいな数学的な関数がありますが,$x$のことを引数(ひきすう)と呼びます.この場合では()となっていて引数が存在しないので,「main関数は引数を取らず,終了コードを整数で返す」と解釈できます.

終了コード

main関数は整数型の終了コードを返すと翻訳しましたが,終了コードとは何でしょう?

終了コードというのは,プログラムがOSに対してどのように終了したのか通知するためのコードです.一般的に0が正常終了ですが,必ずしも0が正常終了とは限りません.プログラムをどう作るかによって何が正常で何が正常ではないか決めることができます.

せっかくなので,以下のプログラムを入力してください.

int main() {
  return 5 + 15;
}

終了コードを電卓代わりに使っていますが,$5 + 15 = 20$ ですよね? 実際に実行すると,Program finished with exit code 20とコンソールに表示されます.

ところが,Paizaのオンライン・コンパイラでこのコードを実行するとエラーが発生します.Paizaでは終了コード0を返したプログラムは正常終了と解釈しているので,0以外の数値をmain関数で返すとエラーが発生します.

OSとプログラムの終了

OSはプログラムの終了をmain関数でreturnされた数値をもとに判断しています.逆に言えば,プログラムの終了をOSに通知するには,main関数で数値をreturnすればいい,ということがわかります.例題はほぼ何もしないプログラムということですね.

おわりに

これで何もしないC言語のプログラムを書けるようになりました.returnされる数字を弄れば電卓の代わりになります.return文の数字を弄って好きな計算をさせてみましょう.足し算+,引き算-,掛け算*,割り算/などの演算子が使えます.

int main() {
    return 5 * 5 + 10;
}
GRGSIBERIA
なんでもやる人.元未踏クリエータ.三次元幾何学と音響工学を少々.
http://www.grgsiberia.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした