我有下面的代码片段,我要分析的输出将是什么:声明的同名全球,本地和静态变量
#include <stdio.h>
void f(int d);
int a = 1, b = 2, c = 3, d = 4;
int main(){
int a = 5, c = 6;
f(a);
f(b);
f(c);
printf("%d %d %d %d\n",a,b,c,d);
return 0;
}
void f(int d){
static int a = 0;
a = a + 7;
b = a + d;
c++;
d--;
printf("%d %d %d %d\n",a,b,c,d);
}
我已经得到的输出如下:
7 12 4 4
15 26 5 11
21 27 6 5
5 27 6 4
这让我很困惑。我注意到,在全部3个函数调用中,全局声明的a
遭受分配,并且在printf()
中从main()
体中打印出在main()
中声明的a
。但是,我不确定其他变量的行为。这是不确定的行为还是它有意义?
不合格的名称始终指最内层的封闭声明。 –
我认为你的输出第2行有一个错字 - 它应该以'14'开头,而不是'15'。 –