为什么我的用户定义函数在没有return语句的情况下可以工作?

时间:2018-12-26 16:29:28

标签: c matrix return

学习C.使用用户定义的功能。

#include <stdio.h>
#include <stdlib.h>

int print_random_matrix (int m, int n);

void main (void)
{
    int m, n;

    printf("m: "); scanf("%d", &m);
    printf("n: ");   scanf("%d", &n);

    print_random_matrix(m, n);
}

int print_random_matrix (int m, int n)
{
    int i, j, a[20][20];
    for (i= 1; i<= m; i++)
    {
        for (j= 1; j<= n; j++)
        {
             printf("%d ", rand()%10);
        }
        printf("\n");
    }
    //why does this work without RETURN?
}

据我所知,您需要一个return语句来从您定义的函数中返回值,但是它没有一个就可以工作,我也不知道为什么。 此代码对我而言并不正确。

代码正确吗?

为什么现在可以正常工作?

如何用return语句编写print_random_matrix函数?(如果需要)

1 个答案:

答案 0 :(得分:3)

无法从具有非void返回类型的函数返回值将调用undefined behavior

未定义行为可以表现出来的一种方法是,程序看起来可以正常运行。但是,看似无关的更改可以更改未定义行为的显示方式。在这种情况下,您永远不会尝试使用返回值,因此这可能就是为什么您看不到任何奇怪行为的原因。

所以仅仅因为程序可能崩溃或输出奇怪的东西并不意味着会。

在这种情况下,正确的做法是将函数的返回类型更改为void

编辑:

即使您无法从函数中返回值,程序也可以正常运行,因为您没有尝试使用该返回值。如果确实尝试使用返回值,则 then 会调用未定义的行为。不过,您应该更改函数以返回void或返回一些有意义的值。