当前位置: 代码迷 >> C语言 >> 问一个关于extern的使用问题!
  详细解决方案

问一个关于extern的使用问题!

热度:332   发布时间:2008-01-26 11:01:12.0
问一个关于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一样。

但是,其他编译器不一定怎样处理这个现象。
----------------解决方案--------------------------------------------------------