返回信息流如下语句
extern "C" int g;
int main{
g=5;
}
编译不通过,g未定义.
但是
extern "C" int g=5;
int main{
g=3;
}
编译通过,只是有[Warning] 'g' initialized and declared 'extern'
按理来说,extern只是一个说明的作用,并不能声明一个变量,为啥第二种方法可以达到声明的效果而不出错呢,不懂啊。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #79410同步于 2014/5/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于extern的诡异现象
lecher
2014/5/13镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
见百度百科extern词条。extern int g = 5;等于int g = 5;定义了一个变量。 extern应该可以用来定义,不只是用来声明。
竟然忘记了百度百科、、、,thx
【 在 amazingguoHa 的大作中提到: 】
: 见百度百科extern词条。extern int g = 5;等于int g = 5;定义了一个变量。 extern应该可以用来定义,不只是用来声明。
嗯嗯~
【 在 ly517691895 的大作中提到: 】
: 我记得C标准的处理是如果给extern的变量直接赋值了,就会变成定义了,等价于int g=5,如果其他地方没有再定义,那就没有冲突,所以能编译过。可以参考 C语言参考手册 里有一章叫“外部名称”的,对extern和其他形式的外部名称的处理有详细说明。
不会吧,我的理解是:
class A;//这是一个声明
class A{...};//这是一个定义
不知道有问题没。。
【 在 binux 的大作中提到: 】
: 你搞反声明和定义了吧