c - 未在 C 中的 for 循环条件中声明的变量仍然有效

标签 c variables for-loop initialization

我在C中写了下面的代码求所有数字的和,当我编译运行它时,它成功了。 但是,后来我才意识到我在 for 循环的条件下没有为变量“n”输入任何值。 我对这个程序的工作方式感到困惑,即使没有为条件变量分配值。 我想澄清一下。

#include<stdio.h>
void main()
{
int no,a,b,n,sum=0;
printf("Enter the number to be added");
scanf("%d",&no);
for(int i=0;i<n;i++)
    {
     a=no%10;
     b=no/10;
    sum=a+sum;
    no=b;
    }   
printf("The sum is %d",sum);
}

最佳答案

I'm confused on how this program works

好吧,“有效” 在这里是一个非常糟糕的观察/决定。这是 undefined behavior .

您正在尝试使用自动局部变量 n 的值,而它是不确定的。这将调用 UB。

引用 C11 标准,章节 §6.7.9

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. [...]

因此,在您的情况下,n 满足上述条件,因此内容是不确定的。

现在,在那之后,如果您尝试使用一个变量,而它持有不确定的值,或者

  • 没有地址被占用
  • 可以有陷阱表示

这种用法会导致未定义的行为。这正是这里的情况。

也就是说,对于托管环境,main() 的一致性签名至少是 int main(void)

关于c - 未在 C 中的 for 循环条件中声明的变量仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628713/

相关文章:

python - 从 cmd 行或 bash 脚本将参数传递给 python 脚本

c++ - 在 For 循环中声明多个变量然后分配这些变量数据

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

php - 单选按钮名称属性可以有数值吗

c - 指针解引用线程安全吗?

c - 为什么需要在 C 中用 * 定义对指针的引用?

c - 位掩码 + 类型转换未按预期返回

c++ - 在 N 个未排序的数字中搜索给定值的最佳方法

c - 通过 for 循环切换大小写声明?

r - 跨多个列检测关键字并在新列中分别标记它们