C语言 函数静态变量多次使用,怎么看

int a=2;
int f(int n) {
static int a=3;
int t=0;
if(n%2) {
static int a=4;
t += a++;
} else {
static int a=5;
t += a++;
}
return t+a++;
}
int main( ) {
int s=a, i;
for( i=0; i<3; i++) s+=f(i);
printf("%d\n", s);
}
为什么是29

每个静态变量a的作用域不同,只在自己所在的作用域有效
for循环执行三次
i=0时,if(n%2)不满足,因此进入else处理,此时else函数体中的静态变量a为5,所以t+=a++后,t为5,a变为6,return t+a++使用的a为函数f第一行的a,此时为3,所以第一次循环后,f(0) = 5+3=9,此时f函数内a的值变为4
i=1时,if(n%2)满足,因此进入if处理,此时if函数体中的静态变量a为4,所以t+=a++后,t为4,a变为5,return t+a++使用的a为4,所以f(1)=4+4 = 8,此时f函数内a的值变为5
t=2时,if(n%2)不满足,进入else,t+=a++,因为a为6,所以t=6,a变为7,return t+a++使用的a为5,故f(2)=6+5=11,此时f函数内的a变为6
最终循环三次后,s=s+f(0)+f(1)+f(2) = 2+8+8+11 = 29

int a=2;
int f(int n) {
    static int a=3;
    int t=0;
    if(n%2) {
        static int a=4;
        t += a++;  //n=1,t=4
    } else {
        static int a=5;
        t += a++;     //n=0,t=5;n=2,t=5;
    }
    //该处的a为static int a=3,一值累加
    return t+a++; //n=0,返回8;n=1,返回8;n=2,返回11
}
int main( ) {
    int s=a, i;
    //s初值=2
    for( i=0; i<3; i++)
        s+=f(i);
        
    //最终结果是s=2+8+8+11
    printf("%d\n", s);
}