为什么我的代码中出现“嵌套函数被禁用...”错误?

时间:2009-12-27 12:08:32

标签: c function

基本上,一个程序可以找到最大的素数因子。不知道逻辑是否正确因为我无法运行它来测试它。我知道这很长。但请原谅我。

//largest_prime.c
#include <stdio.h>
int main() {
    int num,large;
    int prime(int);
    int lprime(int);
    printf("Enter number: "); 
    scanf("%d",&num);
    large = lprime(num);
    printf("Largest Prime = %d\n",large);
    return 0;
}

int lprime(int num) {
    int i=num-1,large;
    while (i!=-1) {
        if (num%i==0) {
            if (prime(i)==1) {
                large=i;
                i=-1;
            }
            i--;
        }
        return large;
    }

    int prime(int num) {
        int prime,i=num-1;
        while (i!=-1) {
            if(num%i==0) {
                if(i!=1) {
                    i=-1;
                    return 0;
                }
                else
                    return 1;
            }
            i--;
        }
    }

我使用GCC在终端(我使用Mac)输出这个:

largest_prime.c: In function ‘lprime’:
largest_prime.c:26: error: nested functions are disabled, use -fnested-functions to re-enable
largest_prime.c:39: error: syntax error at end of input

我尝试了-fnested-functions来重新启用。我明白了:

largest_prime.c: In function ‘lprime’:
largest_prime.c:39: error: syntax error at end of input

请帮助!

3 个答案:

答案 0 :(得分:10)

lprime缺少尾随'}'(实际上我相信你在尾随'}时丢失了)

答案 1 :(得分:6)

return large;

之后你错过了}

编译器推断出你正在lprime内开始一个新的函数声明 嵌套函数错误

答案 2 :(得分:3)

函数不能嵌套在ISO C中;允许一些编译器扩展允许然后不是解决方案;只是让你的代码有效C.你的缩进风格对你没有帮助;但是每个功能的最后一行不在左边缘的事实应该响起警钟。以下编译但不是没有警告(添加了标记的行):

//largest_prime.c
#include <stdio.h>

// Forward declarations
int lprime(int num) ;  //********************
int prime(int num) ;   //********************

int main() {
    int num,large;
    printf("Enter number: "); 
    scanf("%d",&num);
    large = lprime(num);
    printf("Largest Prime = %d\n",large);
    return 0;
}

int lprime(int num) {
    int i=num-1,large;
    while (i!=-1) {
        if (num%i==0) {
            if (prime(i)==1) {
                large=i;
                i=-1;
            }
            i--;
        }              //********************
    }
    return large;
}

int prime(int num) {
    int prime,i=num-1;
    while (i!=-1) {
        if(num%i==0) {
            if(i!=1) {
                i=-1;
                return 0;
            }
            else
                return 1;
        }
        i--;
    }
}

警告是:

main.cpp(34) : warning C4101: 'prime' : unreferenced local variable
main.cpp(46) : warning C4715: 'prime' : not all control paths return a value

我还没有执行代码,所以它是否正常工作是由你决定的。