C++中嵌套函数的全局变量



我是C++的初学者,遇到了一个问题。我在其他函数中定义了一个函数,我假设fun1中定义的变量就像fun2的全局变量一样;但是编译器说这不是在这个范围内定义的!有没有办法让一些变量可以传递给fun2,但不能传递给main或其他函数?

以下是返回错误的示例:

double fun1(double,double);
int main()
{
    double z,x=1.0,y=2.0;       
    z=fun1(x,y);
    printf("z=%f",z);
    return 0;
}
double fun1(double x, double y)
{
    double fun2(void);
    double q=5.0,w=7.0;
    return x*q+y*fun2();
}
double fun2()
{
    return w;
}   

问题:

return w;

wfun2中未知,更改为:

#include <stdio.h>
double fun1(double, double);
int main(void) /* void main is wrong */
{
    double z, x = 1.0, y = 2.0;       
    z = fun1(x, y);
    printf("z=%fn", z);
    return 0;
}
double fun1(double x, double y)
{
    double fun2(double);
    double q = 5.0, w = 7.0;
    return x * q + y * fun2(w);
}
double fun2(double w)
{
    return w; /* Nonsense but it works */
}   

您也可以使用类似宏的函数:

#include <stdio.h>
double fun1(double, double);
int main(void)
{
    double z, x = 1.0, y = 2.0;       
    z = fun1(x, y);
    printf("z=%fn", z);
    return 0;
}
#define fun2() (w)
double fun1(double x, double y)
{
    double q = 5.0, w = 7.0;
    return x * q + y * fun2();
}

在GCC中支持嵌套函数作为扩展:

#include <stdio.h>
double fun1(double, double);
int main(void)
{
    double z, x = 1.0, y = 2.0;       
    z = fun1(x, y);
    printf("z=%fn", z);
    return 0;
}
double fun1(double x, double y)
{
    double q = 5.0, w = 7.0;
    __extension__ double fun2(void)
    {
        return w;
    } 
    return x * q + y * fun2();
}

您似乎在fun1中声明了double fun2(void);。这在功能上没什么——它只是告诉编译器"嘿,有fun2,它什么都不取(void)并返回double

您应该将声明放在fun1的声明之后,就在开头。

当然,函数就是函数!这意味着,它需要输入来计算输出。使用函数调用范围中定义的变量与C函数的预期相反,即在不干扰调用环境的情况下封装功能。

相关内容

  • 没有找到相关文章

最新更新