可能重复:
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我不会从测试函数中返回任何东西,还会有价值吗?
另一个问题
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如果对printf进行注释,则结果是
else--exi为什么会发生这种事
发布于 2011-05-10 16:16:53
声明返回未返回路径的值的函数具有未定义的行为。你只是不走运,因为它似乎还在返回一个半可信的价值。编译器假定函数的所有出口都会调用return,并且返回值将在特定位置可用。
在第二个示例中,任何事情都可能发生,包括每次调用返回不同的值。
g++有一个检测这个问题的警告,它非常值得启用。
发布于 2011-05-10 16:24:43
为什么你的问题同时被标记为C和C++,而标题却专门指C?这两种语文在这方面有很大不同。
在C语言中,这些函数“工作”,因为语言要求它们工作。为什么不行?使用某种返回类型声明的函数仍然可以完成一些有用的工作(除了返回任何内容)。因此,从形式上看,在这样的函数中没有return语句是完全正确的。不过,这不是一个好的编程实践。只要您不尝试使用返回的值(函数没有真正返回该值),该函数就能工作。您正在尝试使用该值,这会使代码的行为无法定义。你说它“有效”。在现实中并非如此。在这种情况下发生了什么以及为什么-这些问题没有答案。为了各种方法和目的,您的代码的行为本质上是随机的和不可预测的。
在C++语言函数中,“忘记”用return语句返回值总是会立即导致未定义的行为,无论调用者是否使用该值。
发布于 2011-05-10 16:17:12
这只是内存中的随机垃圾,因此,第二个示例中的每个调用都会产生不同的结果。
https://stackoverflow.com/questions/5953095
复制相似问题