错误写法:
float fun(int n)
{
double sum =0,s;
for(int i = 1;i<=n;i++)
{
for(int j = 1,s = 0;j<=i;j++)
{
s+=j;
}
sum+=1/s;
}
return sum;
}
注意这行: for(int j = 1,s = 0;j<=i;j++)
表示的写法:int j=1,s=0, 表示定义并初始化了变量j 和s 这个s与 double sum =0,s; 中的s是两个变量。
这种写法跟我们平时定义两个同类型变量的写法是一个道理:
int i =0,j=0; //i和j都是int变量。
另外,
编译出现"name lookup of '变量名' changed
这是因为,在局部作用域嵌套了同名局部变量s
改正后写法:将j变量也在for循环外定义
float fun(int n)
{
double sum =0,s;
int j;
for(int i = 1;i<=n;i++)
{
for(j = 1,s = 0;j<=i;j++)
{
s+=j;
}
sum+=1/s;
}
return sum;
}

本文分析了一个C语言函数中的变量命名冲突问题,并提供了解决方案。原函数使用了相同的变量名s在不同的作用域内,导致编译错误。通过调整变量声明的位置,避免了局部作用域内的同名变量冲突。

被折叠的 条评论
为什么被折叠?



