返回后的语句是否会在它之后执行语句

时间:2014-09-17 12:35:31

标签: c

函数printf("hello")中的fact()语句是否会被执行?如果是,那么在main中调用功能事实时,为什么不打印?如果没有,则此return语句将值返回给函数,并且永远不会接近语句printf("Hello")

#include <stdio.h>

int fact(int n)
{
    if (n == 1)
        return 1; 
    else
        return (n * fact(n - 1)); 
    printf("Hello");
}

main()
{
    printf("%d", fact(6)); 
}

2 个答案:

答案 0 :(得分:0)

int fact(int n)
{
if(n==1)
   return 1; //statement 1 
else
   return (n*fact(n-1)); //statement 2
printf("Hello");
}

函数以return语句结束。 return语句指定函数在返回以下信息时结束。

每当使用任何n值调用函数时,该函数总是在语句1或语句2中结束执行,因此永远不会到达printf语句

答案 1 :(得分:0)

Law of Excluded Middle对于if语句的正式推理非常有用。代码中的两个选项如下:

  • n等于1
  • n 等于1

没有第三个&#34;中间&#34;以这种逻辑说明。

现在让我们回到您的代码,看看会发生什么,具体取决于n的值。如果是1,则代码会返回1。当n 时,您的代码会返回一些计算结果。

为了达到printf("Hello")n需要等于1,同时不等于1(即n==1 && n!=1必须为真)。排除中间的定律允许您在数学上证明此表达式false适用于n的所有值,这意味着printf行在任何情况下都无法访问。优化C编译器将发出警告,并删除这个&#34;死代码&#34;来自他们生成的可执行文件。