extern隐式声明

来源:互联网  时间:2016/9/2 6:20:41

关于网友提出的“ extern隐式声明”问题疑问,本网通过在网上对“ extern隐式声明”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: extern隐式声明
描述:

externc++隐式

在C++ primer上看到非 const 变量默认为 extern,要使 const 变量能够在其他的
文件中访问,必须地指定它为 extern。这句话让我不理解,请看我的截图,是一个.h文件内的
int ival;//这是声明还是定义?变量默认为extern,那么它应该等价于extern int ival?
extern int ival;//这是声明还是定义?和上面是否重复?
extern int ival=10;//这算是定义了吧?

解决方案1:

引用 4 楼 taoqilin 的回复:
我用的是VS2010,int ival是编译不通过的。所以我就搞糊涂了,明明primer上说非const变量默认是extern的,为什么还要显示的去extern下呢?

不显式的话,不就当成定义来进行处理了么,你可以在有初始化的定义的前面加上extern,但是不能把声明的extern去掉
定义和声明是两种东西,看起来像而已,编译过程中的作用是完全不同的,声明只起到了符号输出的作用,供链接时使用,定义才是程序使用的变量 解决方案2:

引用 4 楼 taoqilin 的回复:
引用 3 楼 feiyuren 的回复:引用 2 楼 taoqilin 的回复:可是非 const 变量默认为 extern,那么int ival 不就相当于extern int ival吗?
extern 只是一种属性,显式的话代表声明,《C专家编程》里有对这类问题非常详细的解答
VS下还真能编译过。。MS有了什么特殊处理吧。。
GCC 4.7是编译不过的,报……

例如:(1)
      a.cpp
        int ival;
      b.cpp
        ival=1;   成立
      (2)
      a.cpp
         const int iva
      b.cpp
         extern int ival;//加这句话就成立,不加就会出错。
         ival=1; 解决方案3:

1、int ival; 是定义包含声明 ,extern int ival;只是声明
    所以int ival 和 extern int ival 是不等价的。
2、extern int ival;只是声明,声明不为变量分配空间。编译的时候会认为你有这个变量。
例如:extern int ival; ival=1;你编译的时候是不会报错的,但运行时候会报错。
3、extern int ival=10;是变量的定义,因为初始化ival为10,就会分配给他内存空间,分配内存了就算定义了。

解决方案4:

你确定这个能编译过?
int ival;//这是声明还是定义?变量默认为extern,那么它应该等价于extern int ival?
这就是定义了,加了定义了.h文件不能被两个.c文件include,否则会有符号冲突
extern int ival;//这是声明还是定义?和上面是否重复?
这是声明,声明可以加好多个
extern int ival=10;//这算是定义了吧?
这也是定义,只不过把默认的extern写出来了

上一篇高手帮忙看下这段代码,急(关于Heap和Priority Queue
下一篇关于read
明星图片
相关文章
《 extern隐式声明》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)