“禁用嵌套函数,使用-fnested-functions重新启用”

时间:2010-01-03 06:05:17

标签: objective-c xcode

我想使用这段代码(来自我的上一个问题(感谢Adam)),

bool AllDigitsIdentical(int number)
{
    int lastDigit = number % 10;
    number /= 10;
    while(number > 0)
    {
        int digit = number % 10;
        if(digit != lastDigit)
            return false;
        number /= 10;
    }

    return true;
}

但是编译器只是在第二行中说:}

Nested functions are disabled, use -fnested-functions to re-enable

我的情况怎么办?我没有计划......

谢谢,抱歉我的英语不好。

3 个答案:

答案 0 :(得分:1)

你不会碰巧有这样的事情:

- (void) someMethod
{

    bool AllDigitsIdentical(int number)
    {
        int lastDigit = number % 10;
        number /= 10;
        while(number > 0)
        {
            int digit = number % 10;
            if(digit != lastDigit)
                return false;
            number /= 10;
        }

        return true;
    }

}

也就是说,你在一个方法的实现范围内声明了一个函数(虽然函数中声明的函数会出现同样的问题)。

简而言之,不要这样做。它不受支持,GCC实现它的手段被认为是一个安全漏洞(IIRC)。

将其移到外面:

 bool AllDigitsIdentical(int number)
{
    int lastDigit = number % 10;
    number /= 10;
    while(number > 0)
    {
        int digit = number % 10;
        if(digit != lastDigit)
            return false;
        number /= 10;
     }

     return true;
}


- (void) someMethod
{

    .... call the function here ....
}

答案 1 :(得分:0)

这个函数看起来很好,你可能在这个函数之前错过了代码中的结束}吗?

答案 2 :(得分:0)

您可能将其粘贴到方法或主要功能中!确保将代码块放在任何其他代码块之外。

所以,如果你有主要的地方:

int main(int argc, char **argv){
     //blah
}

确保将代码置于其上方或下方:

bool AllDigitsIdentical(int number){
    //blah
}

不要将它放在主函数(或任何其他方法)的{或}之间