这是一个伤心的故事,有多少小伙伴在写C语言代码时遇到过的情景!
提问:C语言中,未初始化的局部变量到底是多少?
答案往往是:
▶ 与编译器有关;
▶ 可能但不保证初始化为0;
▶ 未确定。
总之,全部都是些一本正经的形而上答案,这很令人讨厌。
但凡一些人给你滔滔不绝地扯编译器,C库,处理器体系结构却给不出一个实际场景复现问题的时候,这人大概率在扯淡。
其实,这个问题本身就是错误的问法,说全了能讲10万字,我们只要能在特定场景下确定其特定行为就OK了,当然,这就需要设计一个比较OK的实验。
在演示一个实际代码行为之前,先给出一个知识,CPU不认识变量,更无法识别变量的名字,CPU只会从特定的内存位置取值或者将值存到特定的内存位置,因此当问一个变量的值是多少的时候,必须要知道这个变量对应的值被保存在什么地方。
来看下面的代码:
#include <stdio.h>
void func1()
{
int a;
printf("func1:%d\n", a);
a = 12345;
}
void func2()
{
int b;
printf("func2:%d\n", b);
}
void func4()
{
int d;
printf("func3:%d\n", d);
}
void func3()
{
int c;