有些感念不明白,请高手指点?
C语言中有关于存储类和生存期的好多概念,不是很明白,请高手指点:1,具有代码块作用域的静态变量
2,具有外部链接的静态变量
3,具有内部链接的静态变量
主要是1和3不是很能分清楚,他们的生存期到底是什么时间不是很明白。
贴一段程序出来,大家给解释一下吧:
// parta.c --- various storage classes
#include <stdio.h>
void report_count();
void accumulate(int k);
int count = 0; // file scope, external linkage
int main(void)
{
int value; // automatic variable
register int i; // register variable
printf("Enter a positive integer (0 to quit): ");
while (scanf("%d", &value) == 1 && value > 0)
{
++count; // use file scope variable
for (i = value; i >= 0; i--)
accumulate(i);
printf("Enter a positive integer (0 to quit): ");
}
report_count();
return 0;
}
void report_count()
{
printf("Loop executed %d times\n", count);
}
// partb.c -- rest of the program
#include <stdio.h>
extern int count; // reference declaration, external linkage
static int total = 0; // static definition, internal linkage
void accumulate(int k); // prototype
void accumulate(int k) // k has block scope, no linkage
{
static int subtotal = 0; // static, no linkage
if (k <= 0)
{
printf("loop cycle: %d\n", count);
printf("subtotal: %d; total: %d\n", subtotal, total);
subtotal = 0;
}
else
{
subtotal += k;
total += k;
}
}
parta和partb是两个不同的文件。大家可以运行一下,对于subtotal和total是如何赋值和重置的真的不是很明白?请高手指点?