为什么以下程序给出退出失败?

时间:2013-12-03 01:28:33

标签: c compiler-errors

阅读以下程序并告诉我输出结果。

f(int n)
  {
      static int i=1;
      if(n>=5) return n;
      n=n+i;
      i++;
  }

main()
{

  f(1);
}

我得到问题的CS Computer Science and IT: Practice Book for PSUs7,但在编译时我得到“退出失败

这可能是什么原因?任何人都可以解释我这个!


commentsGreg Hewgillanswer代码:

#include <stdio.h>
#include <string.h>
static int i=1;
f(int n)
{
    if(n>=5)
        return n;
    n=n+i;
    printf("Before - %d\n",i);
    i++;
    printf("after - %d\n",i);
}

main()
{
    int y;
    y=f(1);
    printf("Main - %d\n",y);
    return 0;
}

5 个答案:

答案 0 :(得分:3)

您的main()函数没有返回任何内容(这意味着它的返回值未定义,并且main()的返回值被报告为程序的退出代码)。将其更改为:

int main()
{
    f(1);
    return 0;
}

现在,如果您希望程序可以打印任何内容,那么您必须添加语句来执行此操作。

答案 1 :(得分:2)

使用C99,退出代码为0。对于较旧的C标准,退出代码未指定。

  

5.1.2.2.3程序终止

     

...到达终止main函数的}返回值0。

答案 2 :(得分:1)

f()也没有返回类型,并且并非所有代码路径都会返回值。

答案 3 :(得分:0)

前C99 mainf都会隐式返回int,即使在C99模式下,许多编译器仍会将此作为扩展名。要修复退出失败,请添加:

return 0 ;
main末尾的

应该解决这个问题,在C99中它应该返回0但在C99之前返回的值是未指定的,因此可以是任何东西。

另一个主要问题是,除非n5,否则如果使用返回值,则会返回f的末尾而没有返回值,这是返回值函数中的未定义行为值。来自C99标准草案部分6.9.1 功能定义 12

  

如果到达终止函数的},则使用函数调用的值   调用者,行为未定义。

所以每个路径都需要f中的显式返回。你的函数的结果归因于undefined behavior,所以任何事情都可能发生。

我们可以通过查看此live exampleclang生成的警告来确认这一切。我们看到的警告如下:

main.cpp:4:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]

f(int n)
^

main.cpp:12:1: warning: control may reach end of non-void function [-Wreturn-type]

}
^

main.cpp:14:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]

main()
^~~~

答案 4 :(得分:0)

听起来你的共享缓存由于不活动而被卸载。测试此方法的一种方法是向现有服务(如果可用)添加角色内缓存,并将缓存使用量交换到此新缓存。此处描述了角色内缓存。

将缓存移出共享产品后,等待必要的1-2分钟以暂停超时,然后重试连接,不应出现延迟。

假设您希望在隔离问题后坚持使用共享缓存选项,我所知道的唯一当前解决方法是运行后台任务,该任务将定期ping缓存以使其保持活动状态。

如果您正在运行完整的Web角色,则可以在应用程序启动时启动后台任务。 如果您通过移动服务进行部署,那么您可以运行&#34; ping&#34;通过预定的工作。您可能遇到的唯一问题是预定作业的最短时间是1分钟,这可能不足以让您的缓存在100%的时间内保持活动状态。http://www.valuze.com/