extern解疑

           写程序时想让我在a.c源文件中定义的变量在b.c中可用,于是想到了extern。由于只是在很久之前于c primer plus上看过,不知道心里想的用法对不对,于是上网找了些文章看看。发现真的和自己印象中那种用法不一样。

        先不说extern "C"(见注释①)。

        用法:

        1、在a.c中定义int n,在b.c中使用extern int n声明就可以使用a.c中的变量n。

        2、在b.c中声明了一个全局的变量,这个全局的变量如果要被引用,就放在b.h中并用extern来声明。 

    仔细看会发现其实两种方法其实是一样的,2中由于b.c是包含b.h的,所以相当于extern是在b.c中,也就是说,extern关键字是放在要使用这个全局变量的文件中的。

        明确了extern的用法,但同时我发现了一个问题:如果我又在c.c中定义一个int n,那么b.c中使用的int n是a.c的还是c.c的?

        于是我决定在书上查找extern的用法。

        C++ primer plus第六版p317中:

        关键字extern表明是引用声明,即声明引用在其他地方定义的变量。

         C primer plus第五版p328中:

         该处详细介绍了extern的用法。extern表明该变量是在别的文件中定义的,也就是说是第一种用法。

         书中没有提到这个问题。接下来只好写程序验证了。

         //a.cpp                   //b.cpp                                         //c.cpp

         int n = 1;                #include<iostream>                   int n = 3;

                                        extern int n;

                                        int main()

                                        {

                                        using namespace std:

                                        cout<<n<<endl;

                                        }


         结果是编译不成功,错误提示说有重复定义的符号,也就是n了。至此我也体会到了这个全局变量的用处,这个n可以表示一个所有源文件都需要用到的变量,类似于系统时间,如果让他能有多个选择的话也就没有意义了。


         注释①extern修饰符可用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。原因是C++有函数重载,C++编译器在编译的时候会改变函数的命名,让你无法调用你想要调用的那个C语言函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值