extern的使用和危害

来源:互联网 发布:squid和nginx 编辑:程序博客网 时间:2024/04/30 15:09

extern 的用途:
extern 在很多时候被我们大量的使用,一般用于引用不在本文件定义或声明的函数还有变量。
对于变量往往更多的是全局变量。
比如在我们在a.c文件定义了一个函数原型,并实现了其功能。当我们再次要使用一个相似功能的函数接口
的时候,我们没必要自己再去实现一遍这样的函数,这样既浪费我们现在宝贵的时间,而且也没有充分利用
我们或者其他人之前所做的努力。

如下所示:a1.c    UINT funca(UINT uiValue)    {        ...    }b2.c    UINT g_uiXxxFlagB2 = 0;/*...*/现在我们要在c3.c文件中使用funca和全局变量g_uiXxxFlagB2,比较简洁的方式就是在c3.c文件中使用extern 声明引用该函数和变量c3.c    extern UINT funca(UINT uiValue);    extern UINT g_uiXxxFlagB2;    UINT funcC3()    {        ...        (VOID)funca(g_uiXxxFlagB2);        ...    }    这样的方式给我们带来了一些很大的便利,从而节省了我们很多的时间和精力;    但是这样做也会存在一些危险,比如我们在c3.c文件引用的在a1.c文件的funca函数原型    由UINT funca(UINT uiValue)变为UINT funca(UINT uiValue1, UINT uiValue2)    我们在编译的时候不会报错,但是在我们执行程序的时候会在使用该函数的时候存在危险,    尤其是该函数若有一个参数为指针,极有可能会存在对指针的误操作,而引起异常;那我们该如何做呢,比较好的方式就是将这些函数和变量放置在一个公共的大家都可以访问到的d4.h文件中,在使用这些函数或者变量的时候,生命一下引用d4.h头文件即可。比如:d4.h    UINT funca(UINT uiValue);    UINT g_uiXxxFlagB2;c3.c    #include "d4.h"    ...    UINT funcC3()    {        ...        (VOID)funca(g_uiXxxFlagB2);        ...    }
1 0
原创粉丝点击