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

c++程序int main()没有返回值却能运行的情况,求分析!

xiaodu000 发布于 2013-11-01 21:28, 772 次点击
编写一个程序,键盘输入一个偶数,输出偶数为两个素数之和。
#include<iostream>
using namespace std;

int sushu(int n)
{
    int i;
    for(i=2;i<=n;i++)
    if(n%i==0) break;
    if(n==i)
    return 1;
    else
    return 0;
}
int main()
{
    int j,n;
    while(cin>>n&&n%2==1)
    cout<<"请输入大于2的偶数"<<endl;
    for(j=2;j<n/2;j++)
    if(sushu(j)&&sushu(n-j))
    cout<<j<<"+"<<n-j<<"="<<n<<endl;
}
我试过了,可以运行,但是没有返回值应该试报错的啊,求分析!
控制台截图
只有本站会员才能查看附件,请 登录
10 回复
#2
yss282013-11-01 21:45
int main() 可以不写返回值,但不代表它没有返回值。
如果你不写返回值,编译器会自动给你补上(只对于main)。方便些而已
#3
yuccn2013-11-02 07:57
没有返回值,那么返回值就是随机数字了,原来ax(eax)是什么数据就返回什么。

没有返回值有些编译器是不能通过的
#4
xiaodu0002013-11-02 08:20
,除此之外,编译器还能自动补上什么东西呢
#5
i802862013-11-02 08:46
编译器能补的未必是正确的,即便编译能过(比如一些警告错误),但不表示程序能正常运行或者说能得到你想要的结果
#6
rjsp2013-11-02 09:57
2楼说得不错,因为C99规定main在无return的分支自动等效于添加了return 0,原文如下
…… reaching the } that terminates the main function returns a value of 0. ……

而C++标准对于这种C中无伤大雅的规定,一般是能兼容C就兼容C。
#7
风雨1232013-11-02 12:20
编译器的问题。
#8
xiaodu0002013-11-02 14:11
哦,理解了,这个是c++标准中规定的,我可以这样理解吗,编译器都遵守不同的标准
#9
rjsp2013-11-02 14:29
以下是引用xiaodu000在2013-11-2 14:11:03的发言:

哦,理解了,这个是c++标准中规定的,我可以这样理解吗,编译器都遵守不同的标准

不能说“编译器都遵守不同的标准 ”,因为世上只有一个标准。
但有的编译器比较古老,开发这个编译器时新标准还未出台;
有的编译器虽然是最新的,但开发者因为各种原因导致其对新标准支持不力。
#10
xiaodu0002013-11-02 17:06
了解了
#11
xiaodu0002013-11-02 17:09
感谢各位的支持,小弟我一定在C++领域努力奋斗,有空常去拜访你们的帖子!
1