注册 登录
编程论坛 C++教室

有关main()函数返回值的问题

slblake 发布于 2007-08-24 22:25, 1845 次点击
int main() 和 void main()之间的区别,选择其中一个的目的又是什么?
虚心求教!
21 回复
#2
maoguoqing2007-08-24 22:34
void main()谁叫你这么写的,用int main()
#3
冰的热度2007-08-24 22:38
区别就在于返回值喽!

int main()需要返回一个int型值,一般是return 0;

void 的意思是没有返回值,注意是没有返回值,而不是返回void 类型的值,

这一点一定注意!!!

说到底,main()函数也是函数,跟普通函数一样,只是别的函数不能调用它,

你应该理解
int sum(int a,int b)
{
return a+b;
}

void sum(int a,int b)
{
cout<<a+b<<endl;
}
的区别吧,那你就应该理解int main()和void main()的区别了!
#4
maoguoqing2007-08-24 22:42
#5
HJin2007-08-24 22:52
If you write

void main()....

your boss will fire you.
#6
冰的热度2007-08-24 22:57
ANSI C 里要求main()前面要加void ,但只是建议性的,所以一般省略.一般在main()前面什么也不加.

而在ANSI C++ 里强制要求加int
#7
aipb20072007-08-24 23:18
永远都没有void main的写法,切记!
#8
slblake2007-08-25 00:50

刚开始学C++,只是觉得迷惑,看到两种main()函数的,谢谢,牢记了

#9
qkjenjoy2007-08-25 08:53

写程序要养成个好习惯
就是坚持 int main(){……
return 0;}

#10
冰的热度2007-08-25 14:31
C++当然要int main()了.

C就不用了,void main()甚至main()就可以!

到了JAVA就是public static vodi main()了.
#11
duffebear2007-09-02 16:00

int main( void )--无参数形式
{
...
return 0;
}

int main( int argc, char *argv[] )--带参数形式
{
...
return 0;
}
#12
qwl19822007-09-04 02:45

我也是不明白
void main()
{}

int main()
{return 0;}
到底有什么本质的区别?
既然main函数不需要返回值,为什么写成void main()就不是好习惯了呢?
main函数的返回值到底有什么用?迷惑ing......
为什么说c++ 要 int main()呢?

#13
qwl19822007-09-04 02:51

明白了,看来还需要多学习
https://bbs.bc-cn.net/viewthread.php?tid=163877&star=at#讲的很明白了,谢谢斑竹~

浏览老版本的C代码,将会发现程序常常以

main()

这种形式开始。C90标准允许这种形式,但是C99标准不允许。因此即使你当前的编译器允许,也不要这么写。

你还可能看到过另一种形式:

void main()

有些编译器允许这种形式,但是还没有任何标准考虑接受它。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地表示:void main( ) 的定义从来就不存在于 C++ 或者 C 。所以,编译器不必接受这种形式,并且很多编译器也不允许这么写。

坚持使用标准的意义在于:当你把程序从一个编译器移到另一个编译器时,照样能正常运行。

#14
parklee2007-09-04 16:29
关键在于实际的2进制代码重 你写的main函数并不是程序的实际入口 如果你反汇编一下会看到 实际上在程序启动的时候,执行了很多步骤来为调用你的main函数做铺垫。那你也就知道为什么要用int而不是void了。因为你的main函数要告诉系统的调用函数main函数的执行结果。
#15
dart2007-09-04 21:03
谁说没有void main(){}的写法了......
我怎么基本上每次都这么调试都不报错????。。。。。
#16
huozoo2007-09-04 23:08
回复:(slblake)有关main()函数返回值的问题

不要过分研究这个问题,没什么好说的。
有一点要说的是:
当现在的编译器能完全满足标准的时候,那么
int main(){}就可以把return 0;省略,因为标准中是不写这句的!这点希望未来的编译器能改进!

#17
福尔摩斯2007-09-05 15:19
以下是引用冰的热度在2007-8-24 22:38:46的发言:
区别就在于返回值喽!

int main()需要返回一个int型值,一般是return 0;

void 的意思是没有返回值,注意是没有返回值,而不是返回void 类型的值,

这一点一定注意!!!

说到底,main()函数也是函数,跟普通函数一样,只是别的函数不能调用它,

你应该理解
int sum(int a,int b)
{
return a+b;
}

void sum(int a,int b)
{
cout<<a+b<<endl;
}
的区别吧,那你就应该理解int main()和void main()的区别了!

你试验下如下代码:

#include<iostream>
using namespace std;
int main()
{
cout<<"hello"<<endl;
main();
return 0;
}

#18
qwl19822007-09-05 17:36

发现int main(){}的一个好处。
可以在主函数任意位置写return 0; 结束主函数。

#19
qwl19822007-09-05 17:40
请教17楼的大侠~
[QUOTE]#include<iostream>
using namespace std;
int main()
{
cout<<"hello"<<endl;
main();
return 0;
}
[/QUOTE]
理论上这么写不是应该死循环么?为什么在执行若干次后就停止了?
#20
qwl19822007-09-05 18:40
已经知道了,程序是无限循环的。但是循环到一定次数以后,被系统终止了。
如果系统用vista的话,就会得到xxx.exe已经停止工作,windows正在检查这个错误
#21
wsy2007-09-06 09:05
但是 林锐的那本里 有这样一个例子是这样 写的

void main(void)
{
float *p = NULL;
while(TRUE)
{
p = new float[1000000];
cout << “eat memory” << endl;
if(p==NULL)
exit(1);
}
}

虽然程序的目的是为了耗尽内存 但是这个例子是可以运行的啊...
为什么呢?
#22
valentineyzq2007-09-06 11:10
事实上有相当一部分教材里主函数是void或没有返回值的(比如北邮的C++教材)。这样省事。但是int main()才是规范的写法。通过返回值可以判断程序是否成功运行。
1