- 追加された行はこの色です。
- 削除された行はこの色です。
**元ネタ [#o9f74d46]
プログラミング初心者スレ・Part1~
http://yutori.2ch.net/test/read.cgi/news4vip/1195645613/~
2 :以下、名無しにかわりましてVIPがお送りします。:2007/11/21(水) 20:50:08.21 ID:cmLDyUZr0
基本形
#include<stdio.h>
void main()
{
return 0;
}
せっかくだから何が悪いのかもちゃんと書きなさいよ><
**C言語 [#zb974208]
という訳で、元ネタで示された基本形の悪いと考えられるところを突っ込む。~
ちなみに、元ネタは以下のもの。
#include<stdio.h>
void main()
{
return 0;
}
一見どこにでもあるようなスタイルに見えるが、いくつかの真似するべきでない過ちを含んでいる。すなわち
-main関数がvoid型になっている
-main関数の戻り値がvoid型になっている
-returnが値を返している
-使ってもいないライブラリを読み込んでいる。
というものだ。
最初の、main関数がvoid型になっているのは、非常によくみるコードだ。~
けれども、ANSIではmain関数はint型で定義するよう定められている。~
最初の、main関数の戻り値がvoid型になっているのは、非常によくみるコードだ。~
けれども、ANSIではint型で定義するよう定められている。~
標準に従うべきか?という議論はあるだろうけれども、俺様オンリーソースでない限り、標準に従っておくのが無難だ。~
スレでは標準にこだわる標準厨が沸くことがあるが、
厳密に標準に準拠する必要はないと筆者は考えているので、
「可能な限り」標準に従えるよう、努力すれば十分だろう。~
それを差し引いても、voidなmain関数はよくない書き方だといえる。~
ちなみに、大学の講義で使われる教科書や、古いタイプの教授はmainをvoidで書きたがる傾向にあるので、注意が必要だ。~
さらにいえば、voidすら書かない古いタイプのものある"rogue"などがそうだ。
次のreturnが値を返しているという点だが、
これは「mainがvoid型なのに、値を返すのはおかしい」という意味である。~
もしmainがint型なら、値を返すのもおかしくはない。~
voidのreturnで返された値は、処理系によっては無視されるだろうが、
これは「mainの戻り値がvoid型なのに、値を返すのはおかしい」という意味である。~
もしint型なら、値を返すのもおかしくはない。~
voidなのにreturnで返された値は、処理系によっては無視されるだろうが、
厳密には正しくないので、returnだけにしておくか、そのまま`}`に落としてしまって、
voidであることを読み手に理解させたほうが良いだろう。~
これらを踏まえて書くと、先の基本形は
#include<stdio.h>
int main()
{
return 0;
}
となる。~
今回はmainをint型に直したので、returnが値を返していてもおかしくなくなった。~
今回はmainの戻り値をint型に直したので、returnが値を返していてもおかしくなくなった。~
きちんとした土台の上に家を建てることが、丈夫な家への近道なのである。
さらに言えば、1行目の
#include<stdio.h>
これも不要といえる。いわゆる"おまじない"とされるものであるが、
実際これは、画面に文字を表示する等(printf)の便利なライブラリを読み込んでいるに過ぎない。
だが、じっさいのプログラムは何もしていないのでこのライブラリ"stdio.h"はまったく利用されていない
ことになる。~
最終的には以下のように添削されよう。
最終的には以下のように添削されよう。~
ちなみに、戻り値の意味は 0 = 正常終了 1 = 不正終了。~
int main()
{
return 0;
}