我在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;
}
答案 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函数应该是相反的,即。封装功能,而不会干扰调用环境。