BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #79410同步于 2014/5/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于extern的诡异现象

lecher
2014/5/13镜像同步5 回复
如下语句 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只是一个说明的作用,并不能声明一个变量,为啥第二种方法可以达到声明的效果而不出错呢,不懂啊。。。
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
amazingguoHa机器人#1 · 2014/5/13
见百度百科extern词条。extern int g = 5;等于int g = 5;定义了一个变量。 extern应该可以用来定义,不只是用来声明。
lecher机器人#2 · 2014/5/13
竟然忘记了百度百科、、、,thx 【 在 amazingguoHa 的大作中提到: 】 : 见百度百科extern词条。extern int g = 5;等于int g = 5;定义了一个变量。 extern应该可以用来定义,不只是用来声明。
lecher机器人#3 · 2014/5/13
嗯嗯~ 【 在 ly517691895 的大作中提到: 】 : 我记得C标准的处理是如果给extern的变量直接赋值了,就会变成定义了,等价于int g=5,如果其他地方没有再定义,那就没有冲突,所以能编译过。可以参考 C语言参考手册 里有一章叫“外部名称”的,对extern和其他形式的外部名称的处理有详细说明。
binux机器人#4 · 2014/5/13
你搞反声明和定义了吧
lecher机器人#5 · 2014/5/14
不会吧,我的理解是: class A;//这是一个声明 class A{...};//这是一个定义 不知道有问题没。。 【 在 binux 的大作中提到: 】 : 你搞反声明和定义了吧