大学の授業で、少し気になったところがあったのでここにまとめてみます。
このプログラムを見てください。
#include <stdio.h>
int main(void) {
printf("Hello World\n");
}
なんかおかしくありませんかね?
C言語を少しやっている人なら一発でわかると思いますが、return 0; がないですよね?
私はこれを見たとき、「これ絶対、警告出るぞ!」と思いました。が、実際コンパイルしてみると警告一つ出ずに、正常にコンパイルできました。
ん!?戻り値をint型としているのにエラーにならない?
ここからは予測です。考えられるのは以下の通り。
- 勝手に切り替えている
- 0を戻すように勝手にコンパイラがしている
- そもそも、戻り値はいらない
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で戻してください。
コメントする