C言語のmain関数の戻り値について

| コメント(0) | トラックバック(0) |

大学の授業で、少し気になったところがあったのでここにまとめてみます。

このプログラムを見てください。

#include <stdio.h>

int main(void) {
    printf("Hello World\n");
}

なんかおかしくありませんかね?

C言語を少しやっている人なら一発でわかると思いますが、return 0; がないですよね?

私はこれを見たとき、「これ絶対、警告出るぞ!」と思いました。が、実際コンパイルしてみると警告一つ出ずに、正常にコンパイルできました。

ん!?戻り値をint型としているのにエラーにならない?

ここからは予測です。考えられるのは以下の通り。

  1. 勝手に切り替えている
  2. 0を戻すように勝手にコンパイラがしている
  3. そもそも、戻り値はいらない

1は、main関数はいろんな形を持っているので、適切な物に切り替えているという考え。

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

2は、コンパイラの最適化などが働いているであろうという考え。

3は、main関数にvoidが使えるのだから、最初からいらないという考え。

 

普通の関数で、戻り値をvoid以外にし、returnを省くと、当然エラーになります。コンパイルは出来たと思います。

関数には、しっかりと戻り値を返すようにした方がよいと思います。こんなことで、バグになっては困ります。
関数は、必ずreturnで戻してください。

トラックバック(0)

トラックバックURL: https://www.letstryit.net/mt/mt-tb.cgi/53

コメントする

アーカイブ

カウンタ

Total
Today
Yesterday

IPv6 Ready

Powered by Movable Type 7.0