一、主函数也是函数
首先我们要了解C/C++中函数的定义,因为main函数也是函数,与其他函数的区别只是主函数是程序的主线而已,程序从它开始也在其中结束。一个函数由函数名、其前的类型标识符、其后小括号里声明的参数类型和参数名(这里的参数叫形参,即形式参数或虚拟参数)以及大括号里的函数主体构成。主函数main也不例外。
二、main前面用int还是void?
main前面的是类型标识符,也就是类型名,其决定的是函数返回值的类型,int指有返回值且返回值为整形,void表示“空”即没有返回值。
很多时候函数是不需要返回值的,只作为语句执行就完成任务了,比如主函数main常常就是;有返回值的函数通常出现在表达式中,如int i=rand();
rand()返回一个随机值替代自身位置赋值给i,有返回值的函数定义其返回值类型可以各式各样,有int有char有float有double。
对于主函数,我们常常只要程序执行它,并不需要它的返回值,所以有人用int main加上return 0,有的直接用void main。但最后制定标准的人说了:‘main’ must return ‘int’,其他的乱七八糟的返回值类型都不行,void也不行,以此盖棺定论。只能返回int,这大概就是main作为一个主函数的尊严,本身没什么意义就是,毕竟return 0都不需要你自己加,编译器就代劳了。
所以对于其他花花绿绿的函数,主函数main前只能加int(就好比主函数只能用main表示一样,只是这么规定而已),老的编译器可能还能用void,但现在的严谨的编译器大多默认int,用void会报错。
顺便说一句,void main()或void main(void)是写程序的人根据函数原型自行发明的,C和C++标准中可从来没有定义过void main。
再偷偷告诉你,如果你受不了强权的话你可以直接用main()省略int,不过这也只是以前的写法,早晚会在渐渐的标准化中被淘汰,当然编译器是不大会报错的就是了。
三、int main()的小括号里加不加void?
有参数的要写上对应数目的参数数据类型和参数名,没有参数的就不写或写上void,大多数情况下main是不需要参数的。
那么写上void如何?不如何,很好,非常正确。用int main(void)这种写法非常标准,当然用int main()也是被广泛接受的,两者都表示本主函数没有参数,以C和C++标准来看都是正确的。
四、在int main()后的主体里面能不能出现非int类型的的东西?
不论返回值数据类型或者参数数据类型如何都不影响你在函数(不论主函数还是其他函数)主体内使用其他各种数据类型。
上一个奇葩程序:
#include<iostream>
int main()
{
float a;
double b;
char c;
float xy(short x,double y,int z);//函数定义在主函数之前时可省略此声明语句。
std::cout<<xy(1,1,1);
}
float xy(short x,double y,int z)
{
float a=3.1;
char b='a';
int c=1;
return a;//最好返回的值对应float数据类型,否则会将对应二进制码按float规则强制转换,至于报错是不可能报错的。
}
五、总结
在C/C++中声明主函数要么写成int main(),要么写成int main(void)。main()、void main()和void main(void)这三种写法尽量放弃。