问一个关于extern的使用问题!
[root@localhost parta]# cat parta.c #include <stdio.h>
void report_count();
void acculate(int k);
int count=0; //具有外部作用域的静态变量;
int main(void)
{
int value; //自动变量;
register int i; //寄存器变量;
printf("Enter a positive integer(0 to quit):");
while(scanf("%d",&value)==1&& value>0)
{
++count;
for(i=value; i>=0; --i)
{
acculate(i);
}
printf("Enter a positive integer(0 to quit):");
}
report_count();
return 0;
}
void report_count()
{
printf("Loop executed %d times\n",count);
}
[root@localhost parta]# cat partb.c
#include <stdio.h>
extern int count; //外部变量的引用声明;
static int total=0; //具有内部作用域的静态变量;
void acculate(int k)
{
static int subtotal=0; //具有代码块作用域的静态变量;
if(k<=0)
{
printf("Loop cycle: %d\n",count);
printf("subtotal: %d;total: %d\n",subtotal,total);
// subtotal=0;
}
else
{
total+=k;
subtotal+=k;
}
}
在partb.c的第三行
extern int count; //外部变量的引用声明;
我把extern去掉之后,运行结果和有extern是一样的,这是为什么阿???
搜索更多相关的解决方案:
extern
----------------解决方案--------------------------------------------------------
当然是因为gcc默认认为你这种用法的意思是两个文件里面的count变量是同一个,所以没有extern它也理解成有extern一样。
但是,其他编译器不一定怎样处理这个现象。
----------------解决方案--------------------------------------------------------