关于网友提出的“ 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:
不显式的话,不就当成定义来进行处理了么,你可以在有初始化的定义的前面加上extern,但是不能把声明的extern去掉
定义和声明是两种东西,看起来像而已,编译过程中的作用是完全不同的,声明只起到了符号输出的作用,供链接时使用,定义才是程序使用的变量 解决方案2:
例如:(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,就会分配给他内存空间,分配内存了就算定义了。
你确定这个能编译过?
int ival;//这是声明还是定义?变量默认为extern,那么它应该等价于extern int ival?
这就是定义了,加了定义了.h文件不能被两个.c文件include,否则会有符号冲突
extern int ival;//这是声明还是定义?和上面是否重复?
这是声明,声明可以加好多个
extern int ival=10;//这算是定义了吧?
这也是定义,只不过把默认的extern写出来了