首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么c中返回类型的函数可以使用out返回语句?

为什么c中返回类型的函数可以使用out返回语句?
EN

Stack Overflow用户
提问于 2011-05-10 16:14:16
回答 6查看 580关注 0票数 7

可能重复:

Why can you return from a non-void function without returning a value without producing a compiler error?

代码语言:javascript
复制
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

我不会从测试函数中返回任何东西,还会有价值吗?

另一个问题

代码语言:javascript
复制
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进行注释,则结果是

代码语言:javascript
复制
else--exi

为什么会发生这种事

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-10 16:16:53

声明返回未返回路径的值的函数具有未定义的行为。你只是不走运,因为它似乎还在返回一个半可信的价值。编译器假定函数的所有出口都会调用return,并且返回值将在特定位置可用。

在第二个示例中,任何事情都可能发生,包括每次调用返回不同的值。

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

票数 5
EN

Stack Overflow用户

发布于 2011-05-10 16:24:43

为什么你的问题同时被标记为C和C++,而标题却专门指C?这两种语文在这方面有很大不同。

在C语言中,这些函数“工作”,因为语言要求它们工作。为什么不行?使用某种返回类型声明的函数仍然可以完成一些有用的工作(除了返回任何内容)。因此,从形式上看,在这样的函数中没有return语句是完全正确的。不过,这不是一个好的编程实践。只要您不尝试使用返回的值(函数没有真正返回该值),该函数就能工作。您正在尝试使用该值,这会使代码的行为无法定义。你说它“有效”。在现实中并非如此。在这种情况下发生了什么以及为什么-这些问题没有答案。为了各种方法和目的,您的代码的行为本质上是随机的和不可预测的。

在C++语言函数中,“忘记”用return语句返回值总是会立即导致未定义的行为,无论调用者是否使用该值。

票数 3
EN

Stack Overflow用户

发布于 2011-05-10 16:17:12

这只是内存中的随机垃圾,因此,第二个示例中的每个调用都会产生不同的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5953095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档