留年戦記

留年と工学と人間関係と毎日戦っている人のブログです. 今年は留年回避済み.プロマネのお勉強中.留学試みたりTOEICの得点向上を試みたり.普通に学校の勉強を頑張ったり工学(プログラミングも回路も)について学んでみたり.時々レーザーカッターのパラメータを記事にしてます.

【C言語】main関数の本当の意味….実は,引数が使える.

部屋のBGMのために新しいスピーカーを作ろうか悩んでいるあこさんです.

 

今回はC言語続きということで

int main()

の使い方について書こうと思います.

 

1,そもそもint main()とは

 C言語のプログラムにおいて,最初に実行される関数です.

 同時に,この関数の終了をもってプログラムの終了とします.

 main関数以外の関数はmain内で呼び出されない限りなんの役割も持ちません.

 

2,main()の型がvoidだったりintだったりするのってどういう意味があるの?

 void=型なしです.要は値を返しません.

 戻り値なしの関数ですという宣言になります.

 また,int=整数型の場合,戻り値として整数を返します.

 通例として0か1を返します.

 

3,return 0とreturn 1の違いって?

 気持ちのわるい書き方だと思いますが,実はreturn(1)やreturn(0)と書いても動きます.(私はなぜかずっと()をつけて書いてました)

 return 0とreturn 1の違いはプログラムの終了時のエラーです.

 return 0なら異常なしのプログラム終了.

 return 1なら異常ありのプログラム終了.

 として使います.

 よく,if文の中でエラー処理してる先にreturn 1があるのはこのためです.

 ifでエラーをはいている→終了!→でもユーザーには失敗って伝えなきゃ!という流れで1を戻り値として返します.

 問題がなければ0を返します.

 

4,実はmain関数には引数が存在する…⁉

 ほかの関数には引数というものが存在するのにmain関数にないわけがないじゃないですか!

 main()の()とは引数がないよという意味で本来(void)となっています.

 ここに引数を入れる場合…実はこんな感じになります.

int main(int argc,char *argv[])

 このargcとは,引数として入れられた数字の数が入ります.

 そして*argvには引数として入れられた文字列が入ります.

 一つ一つが配列となっていて,1番目に引数としたものが「aco」だとしたら,argv[1]にacoが入ります.

 argv[0]にはプログラムの名前が入ります.

 *argvはポインタの配列なので,配列の中には文字列を入れたアドレスが入っています.

 このポインタ配列ってところを覚えていないと痛い目にあうので絶対にここだけは覚えていってくださいね.

 

 それではmainの引数の話でした.