gpt4 book ai didi

C 行为(非初始化值)

转载 作者:行者123 更新时间:2023-12-04 10:27:27 30 4
gpt4 key购买 nike

我有一个关于 C 代码的问题。

#include <stdio.h>

void foo(void){
int a;
printf("%d\n",a);
}

void bar(void){
int a = 42;
}

int main(void){
bar();foo();
}

显然我应该在编译结束时得到 42 作为结果。 http://www.slideshare.net/olvemaudal/deep-c ,幻灯片 #126。但是当我在我的机器上编译它时,我得到垃圾值 (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5))

我需要关闭某些优化吗?还是幻灯片的作者对此有误?有人可以解释代码的结果是什么吗?如果是 42,您能否也解释一下如何/为什么?此外,在 C++ 编译器 (g++) 上的结果是否会有所不同。

最佳答案

你不知道你会得到什么。我猜的假设是第二个堆栈帧将与最后一个堆栈帧位于相同的位置,并且由于 var a 是第一个变量,因此它应该被分配与先前函数堆栈帧中的 a 相同的位置。但这不是定义的行为。

关于C 行为(非初始化值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971001/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com