誰も教えてくれない『C言語のおまじない』とは…?
C言語の勉強を始めたんだけど、もう挫折しそう…
C言語の勉強を頑張っているそこの『あなた』。
C言語って独特なクセがあるから、分かりづらいですよね。
C言語を講じる際に,「#includeを記述することはおまじないです」というように本質を隠蔽して教えることがあるが、隠蔽して考えることが納得できない受講者がいるため、得てして指導に失敗する。(経験では、成績上位の受講者ほど、隠蔽された内容に疑問を感じてしまい、混乱を起こしているようである。)
混乱を招くきっかけとなる『C言語のおまじない』ですが、もう大丈夫です。
本記事を読めば『C言語のおまじない』の意味が確実にわかります。
おまじないの意味が分かると、C言語のコードが少しずつ書けるようになっていきますので、ぜひ参考にしてみてください。
気になるところへGO!
C言語の『おまじない』ってなんなの?

では、早速『おまじない』の説明でよく使われるプログラムのコードを見てみましょう。
#include<stdio.h>
int main(void){
printf("ヤバいよ!ヤバいよ!\n");
return 0;
}
このプログラムは画面に『ヤバイよ!ヤバイよ!』と表示させるプログラムです。
このプログラムには3つのおまじないが含まれています。
- #include<stdio.h>
- int main(void)
- return 0;
でもこの3つのおまじないって、明確な意味があるコードなんです。
『#include<stdio.h>』ってなに?

まずは『#include<stdio.h>』に関して、ご紹介していきます。
『#include<stdio.h>』の意味を一言にすると次のようになります。
stdio.hという説明書を読んで!
先ほどの『ヤバイよ!ヤバイよ!』を表示するプログラムのコードを思い出してください。
その中には画面に文字を表示させる『printf』というコードを使って、文字を表示させています。
この『printf』さえあれば、文字の表示ができそうな気がするのですが…
一見関係なさそうに見える『#include<stdio.h>』という文章を消してしまうと、プログラムは動かなくなってしまうのです。
『printf』とは画面に文字を表示するコードです。
この1行のコードを書けば、コンピュータがいい感じに文章をディスプレイに表示してくれそうな気がしますよね?
でも、実際にはコンピュータは『printf』を次のようなコードに翻訳してから実行しているのです。(次のコードの内容を理解する必要はありません。)
int __printf (const char *format, ...){ va_list arg; int done; va_start (arg, format); done = vfprintf (stdout, format, arg); va_end (arg); return done; }
『printf』を翻訳するためには、翻訳内容が書かれたファイルが必要になります。
そして、この翻訳内容が書かれているファイルが『stdio.h』というファイルになるんですね。
なので、『#include<stdio.h>』というコードを最初に書くことで、『stdio.h』というファイルをコンピュータに読み込ませます。
その結果、コンピュータは『printf』というコードを見つけたら、『stdio.h』に書かれた通りに翻訳して実行できる状態にしているのです。
#include<stdio.h>を書く場所はプログラムの先頭になります。
というのも、プログラムは先頭から読み込まれていくので、最初に説明書を渡しておかないと正しく翻訳できないからです。
stdioとはスタジオのことではなく、standard input and outputの略になります。
標準的な入力・出力の翻訳内容が記載されているという意味でとらえればOKです。
他にも説明書はたくさんありますが、だんだん覚えていけば大丈夫ですよ。
『int main(void)』ってなに?

続いてはint main(void)に関してです。
int main(void)を一言でいうと、『一番最初に実行するプログラムの性質』を意味しています。
①『main』
実はC言語には、プログラムの実行順序にルールがあります。
次のプログラムのコードをご覧ください。
#include<stdio.h>
int real(void){
printf("リアルガチ!\n");
return 0;
}
int main(void){
printf("ヤバいよ!ヤバいよ!\n");
return 0;
}
こちらのプログラムを実行すると、どうなるのでしょうか?
実際にこのプログラムを実行すると『リアルガチ!』は表示されません。
というのも、C言語のプログラムは上から読み込まれていくのですが、上から順番に実行されるわけではないからです。
C言語の場合、最初に実行するプログラムはmainからと決まっています。
そのため、mainに書かれている『ヤバイよ!ヤバイよ!』しか表示されないんです。
このように、おまじないの『main』は最初に実行されるコードの位置を意味しているのです。
mainより前にプログラムを書いても、main関数で呼び出さない限り実行されません。
しかし、読み込まれてはいます。
そのため、『使う準備はできているけど使わなかった』という状態になるのです。
②mainの前にある『int』
続いては、mainの前にある『int』のご説明をいたします。
『int』というのは『integer』の略で整数を意味するのですが、mainなどの関数名の前につくとちょっと意味が変わります。
関数が終わったときに出力する値の種類を表現しているのです。
先ほどのプログラムを実行すると『ヤバイよ!ヤバイよ!』と表示されます。
このような文字をディスプレイに表示されるプログラムであれば、プログラムが終わったことが分かりやすいのですが。
計算するだけで何も表示しないプログラムだったらどうでしょうか。
プログラムが終わったことがコンピュータに伝わらないとコンピュータは処理に困ってしまいます。
その場合は、ずっとプログラムを実行することになるので、フリーズなどの異常が発生することがあるのです。
このようなことにならないように、プログラムが終わったことをきちんとコンピュータに伝える必要があります。
では、どうやって伝えればいいのでしょうか?
関数が終了したことをコンピュータに伝えるために、関数は情報を出力しています。
代表的な方法としては、関数の終了時に整数を出力することでしょう。
しかし、このような方法を実践するためには、事前にコンピュータに『どのような情報で関数の終了を伝えるか』を知らせておかなければいけないのです。
この役割を担うのが、関数名の前にある『int』になります。
mainの前に『int』を付けることで、『main関数が終わったら整数を出力するよ』とコンピュータに予告しているのです。
③『(void)』
続いて(void)の部分です。
このカッコの部分を簡単に説明すると『mainへのプレゼント』を意味しています。
プレゼントといっても、そんな華やかなものではありません。
計算や処理に使うデータのことなのです。
例えば家計簿プログラムに今月の貯金額を計算してほしいときは、収入と出費のデータを渡しますよね?
この収入と出費のデータがプレゼントになるのです。
先ほどのmainの引数にはvoidと書かれていたと思います。
voidとは『空っぽ』を意味する英単語なので、引数にvoidがあるということはプレゼントがないという意味になります。
つまり、『(void)』の部分は『mainは何もデータを渡さなくても処理が行われるプログラムですよ』と言うことを意味しているのです。
『return 0;』ってなに?

残るおまじないは『return 0;』になります。
これは、『プログラムを終了させてメッセージを発信する』ということを意味しています。
先ほど『プログラムが終わったときは整数を出力してコンピュータに終わったことを伝える』と説明しました。
『return 0;』がその整数の出力に当てはまるのです。
言い換えれば、『return 0;』はプログラムを終了させて『0』というメッセージをコンピュータに送っていることになります。
コンピュータはmainから『0』を受け取ると、プログラムの実行時に使っていたメモリのデータなどを消去したり、次の命令を受け付ける準備をしたりするのです。
int main(void)の場合、基本的にreturnに使用する値は整数であればなんでもOKです。
ただし慣習的に正常終了なら0、異常終了なら0以外にする傾向があります。
まとめ
以上がC言語で最初に立ちはだかる『おまじない』の正体になります。
おまじないの正体を掴んでいただけたのではないでしょうか?
このような『おまじない』が必要な理由は、考えなくてもOKです。
だって、C言語はそういうプログラミング言語だから。
英語などの言葉と同じで、C言語のプログラムを実行するために必要なものと決められているのです。
だから、おまじないの意味を知ったら、細かいことは気にせずにプログラムの作成に移っていきましょう。

