一尘不染

为什么没有return语句的main函数返回值12?

linux

我编写了一个打印表格的程序。我没有在主函数中包含返回语法,但是无论何时我键入echo $?它显示12。

我的源代码:

#include <stdio.h>


int main(void)
{
    int ans,i,n;
    printf("enter the no. : ");
    scanf("%d",&n);

    for(i=1;i<=10;i++)
    {
        ans = n*i;
        printf("%d * %d = %d\n",n,i,ans);
    }
}

我尚未编写return 12,但每次执行程序时它仍返回12。

谢谢。


阅读 351

收藏
2020-06-02

共1个答案

一尘不染

正如swegi所说,这是未定义的行为。 正如史蒂夫·杰索普(Steve
Jessop)等人所说,在C89之前,它是一个未指定的值,并在C99中指定(观察到的行为与C99不符)。

在大多数环境中实际发生的情况是,最后一个值的返回值printf保留在用于返回值的寄存器中。

因此,对于n == 0,它将是11;如果n是一位,它将是12;对于两位n,它将是14;对于三位n将是16,等等。

2020-06-02