【发布时间】:2014-01-28 14:12:15
【问题描述】:
我正在准备面试。
我的 c 程序是:
void foo(void)
{
int a;
printf("%d\n",a);
}
void bar(void)
{
int a=42;
}
void main(void)
{
bar();
foo();
}
我得到的输出是:42
但是怎么做呢?我认为这将是一些垃圾值。
执行栈或激活帧的概念是如何应用的?
请解释
谢谢
【问题讨论】:
-
42是一个完全合理的垃圾值 -
由于“无法再复制的问题或简单的印刷错误”而关闭的投票是不合时宜的。这个问题也不是。它可以通过关闭优化在大多数 C 实现中重现,这显然不是印刷错误。
-
我不是反对者,但我完全理解为什么有人不喜欢您的帖子:(1)问题标题包含的信息不多,它谈论的是您的个人问题,而不是技术问题您遇到 (2) 任何好书或其他资源都应该告诉您,您不应该打印未使用具有足够警告级别的值 (3) 初始化的变量,现在任何体面的编译器都应该哭泣。
-
@JensGustedt:(2)无关紧要。 OP没有询问这是否是好的做法或为什么。他们问了一个不同的问题,为什么当它不在 C 标准规定的行为范围内时会观察到这种行为。事实上,这样做的原因确实存在,而且原因在于计算机编程领域。