函数返回错误的值

时间:2014-11-19 02:19:36

标签: c function return

我不理解此代码的输出:

#include <stdio.h>
long func(long pass)
{
    long ret;
    long i = pass;

    if (i == 6)
    {
        printf("i=%ld\n",i);
        return i;
    }
    printf("ended\n");
}

void main()
{
    int j;
    long it = 0;
    for(j = 0; j < 12; j++)
    {
        printf("%ld\n",func(it));
        it++;
    }
}

输出显示&#34;结束&#34;和&#34; 6&#34;每次除非达到i = 6,那时它打印i = 6和6.

为什么?每次都不应该进入i == 6吗?

4 个答案:

答案 0 :(得分:3)

i不等于6时,在没有return语句的情况下运行函数的结尾,这会给你未定义的行为 - 任何可能发生的事情。

在这种情况下,它可能只返回在函数末尾的硬件返回寄存器中发生的任何事情,这可能只是常量6,因为编译器可能已经将它放在那里进行比较。一个不同的编译器(甚至是在不同的一天运行的相同编译器)可能会给你一个不同的结果。

答案 1 :(得分:2)

i == 6不为真时,执行到达func的末尾而不会遇到return语句。这会导致函数返回不确定值

然后行printf("%ld\n",func(it));访问不确定的值,这会导致未定义的行为。

答案 2 :(得分:0)

控件到达long func(long)的末尾,因为return语句在if条件内,如果&#39; i&#39;不等于6。

答案 3 :(得分:0)

When i is not equal to 6 it throws the warning as ::  warning C4715: 'func' : not all control paths return a value
and returns an indeterminate values and printf("%ld\n",func(it)); prints that value like,
ended
1
ended
1
ended
1
ended
1
ended
1
ended
1
i=6
6
ended
6
ended
6
ended
6
ended
6
ended
6
相关问题