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

时间:2015-02-20 11:34:44

标签: c global-variables

我在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;
}   

2 个答案:

答案 0 :(得分:3)

问题:

return w;
w中未知

fun2,请更改为:

#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=%f\n", 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=%f\n", z);
    return 0;
}

#define fun2() (w)

double fun1(double x, double y)
{
    double q = 5.0, w = 7.0;

    return x * q + y * fun2();
}
支持

Nested functions作为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=%f\n", 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();
}

答案 1 :(得分:0)

您似乎在double fun2(void);内已宣布 fun1。这没什么功能 - 它只是告诉编译器“嘿,有fun2,什么都不带(void)并返回double。函数as是未定义的。

您应该在宣布fun1之后立即发出声明。

当然,功能是一个功能!这意味着它需要输入来计算输出。使用函数调用范围中定义的变量与C函数应该是相反的,即。封装功能,而不会干扰调用环境。

相关问题