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)
为什么会这样发生
声明为返回到达没有返回路径的值的函数具有未定义的行为.你不幸的是它似乎仍然会返回一个半合理的价值.编译器假定return在函数的所有出口中调用a ,并且返回值将在特定位置可用.
在第二个例子中,有效的事情可能发生,包括每次调用返回不同的值.
g ++有一个警告来检测这个问题,它非常值得启用.