【问题标题】:Id returned 1 exit status errorid 返回 1 退出状态错误
【发布时间】:2017-03-02 04:05:28
【问题描述】:

我已经尝试找出这个错误将近一个小时,但遇到了麻烦。我正在阅读这篇文章:C compile error: Id returned 1 exit status,有人说这可能是因为程序仍在运行。我已经检查过了,它没有运行,我仍然得到错误。

这是错误的样子:C:\Program\collect2.exe [Error] ld 返回 1 个退出状态。

我还查看了一些带有答案的帖子,例如:Id returned 1 exit status error in my C program,最重要的回应是这是一个“链接器错误”并且程序被错误地编译。我尝试创建一个新项目并复制代码,但最终出现相同的错误。然后我进入编译器选项并截取了选项的屏幕截图。这些选项看起来好吗?

也许它只是我忽略的代码中的一个错误。我必须创建一个尾递归函数来添加数字。比如用户输入4,函数加4+3+2+1得到10。

我相信错误出在while循环中的这段代码中:

else{

        printf("Answer = %d \n", addNum(num));  
    }

当我注释掉它时,我可以运行它并输入负数或零并获得输出。如果我的程序关闭,因为函数中的输出无法正确输出,我不希望你更正它。我稍后会调整这些东西并为自己找出答案,我只是在寻找为什么会出现此错误。

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

int addNum(int n);
int main(int argc, char *argv[]) {

    int num;
    int count = 1;


    printf("Enter an integer greater than zero, (q to quit): \n");


    while(count < 3){

        printf("Enter a positive number: \n");
        scanf("%d", &num);

        if(num < 0){

            printf("Enter a positive number: \n");
        }
        else if(num == 0){

            printf("Answer = 0 \n");
        }
        else{

            printf("Answer = %d \n", addNum(num));  
        }


     }


    int addNum(int n){

       int answer; 

       if(n > 0){

          answer = n += addNum(n - 1);  
       }
       return answer;
    }

   return 0;
  }

【问题讨论】:

  • addNum 的实现应该在main()之外
  • 不是问题,但你的while 循环永远不会结束循环
  • 无论如何,如果你像 WhozCraig 所说的那样将 addNum 的定义移到 main 之外,它应该可以正常编译。
  • 移动它起作用了,因为 C 不支持本地函数定义(即嵌套函数)。坦率地说,我很惊讶您的代码编译。如果您的编译器通过某些扩展支持这一点(如果他们这样做,他们对您没有任何帮助),那么问题就变成了位置之一。
  • Nested functions are a GCC extension。标准 C 不支持它们。

标签: c recursion compiler-errors tail-recursion


【解决方案1】:

由于addnummain 函数中定义,您会收到此错误。默认情况下,C 不支持嵌套函数。但是,gcc 有一个允许嵌套函数的扩展特性。它们是非标准的,因此完全依赖于编译器。

这里是link

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2017-09-04
    • 2017-05-20
    • 2018-04-16
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多