为什么在c中使用returntype的函数与return语句一起工作?

Nig*_*hil 7 c

可能重复:
为什么可以从非void函数返回而不返回值而不产生编译器错误?

void main()
{
    int y=0;
    clrscr();
    printf("%d\n",Testing());
    y=Testing();
    printf("%d",y);
    getch();
}
int  Testing()
{
    int x=100;
    //return x;
}

Result 
512
4
Run Code Online (Sandbox Code Playgroud)

我没有从测试功能返回任何东西还有价值吗?

另一个问题也是

void main()
{
    char Testing();
    int y=0;
    clrscr();
    printf("%d\n",Testing());
    if(Testing())
        printf("if--exi");
    else
        printf("else--exi");
    getch();
}
char Testing()
{
    char y;
    //return y;
}

Result

0
if--exi
Run Code Online (Sandbox Code Playgroud)

如果printf被评论,那么结果是

else--exi
Run Code Online (Sandbox Code Playgroud)

为什么会这样发生

Mar*_*k B 5

声明为返回到达没有返回路径的值的函数具有未定义的行为.你不幸的是它似乎仍然会返回一个半合理的价值.编译器假定return在函数的所有出口中调用a ,并且返回值将在特定位置可用.

在第二个例子中,有效的事情可能发生,包括每次调用返回不同的值.

g ++有一个警告来检测这个问题,它非常值得启用.