你不知道的main函数!!!

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值