main函数
众所周知,main函数是一个C语言程序的入口。即便是写一个“hello world“程序,我们也避不开它。那么,你真的了解这个”熟悉的朋友“吗?~~~///(^v^)\\\~~~
main函数的返回类型
我们最常见的形式是:
int main()
{
body
return 0;
}
但是有些小伙伴可能还见过不加 return 0;语句的版本,那么函数的返回类型还有必要写成int吗?同时我们知道没有返回值的函数返回类型可以写成void,那么在这里这几种写法可行吗?/_ \
接下来我将在代码中展示这几种写法:
int main() { body .... return 0;}//经典写法
void main() { body... }//写法1
main() { body... }//写法2
写法一和写法二可行吗?
首先我摆出结果:不知道!!!那么平时这样写吗:千万别!!!
为什么说不知道呢?
我们要知道自己编译器支持的标准不同,那么对语法的支持也不同,因此一种语法可不可行可能不会是能得到通用答案的问题(/(ㄒoㄒ)/~~)。那么我们讨论这个问题,就需要讨论具体标准了。
C语言函数的默认返回类型
在ANSI C标准下定义C语言函数时若没有写明返回类型,则默认返回类型为int。因此写法二在这个标准下等同于:
int main{ body... }
那么在这个标准下,这种写法因为没有return语句,函数返回值是不确定的,那么在特殊情况下可能会引发问题。但是,在C99标准下,函数不会有默认的返回类型,因此写法二就理所当然地”寄喽“。
而写法一显式声明了main函数没有返回值,但标准C不允许写法一存在的。
不过考虑到编译器的实际支持,在一些编译器上这样写程序也能跑起来(ˉ▽ˉ;)...,而在不支持的编译器上跑不起来。
main函数的参数
我们很多时候写main函数时,参数列表中什么都没有,但也能通过编译,但有人在参数列表内写了一个void,程序也能运行,讨论这个问题,那么我们又要回到具体标准上来。
在C11标准之前,C语言函数的参数列表如果是空的,那么编译器会认为这个函数接受可变数量的参数,那么如果不小心往你不想有参数的函数内添加了参数,编译器也不会报错,最后就可能会引发一些列问题。那么我们写main函数时最好在参数列表里写上void。(❁´◡`❁)
而C11标准后,空的参数列表就已经被认为是表示函数不接受任何参数了(即自带void),那么我们就不必再写void了。(写了也是可以的啦)( •̀ ω •́ )✧
总而言之
main函数的写法我们写成经典写法就好,不必为了省一点点时间,写成其他的写法,因为其他的写法要根据编译器具体实现的标准来,最后如果出现问题的话得不偿失了。(T_T)
(本文并未讨论以下这种写法,因为这种写法的语法要求比较严格,不至于被弄混嘻嘻)(´▽`ʃ♡ƪ)
int main(int argc, char* argv[]){
// Body
return 0;
}