我是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;
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=%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函数的预期相反,即在不干扰调用环境的情况下封装功能。