【发布时间】:2018-04-10 05:14:00
【问题描述】:
我无法理解 extern 的用法以及声明与定义的主题。我不明白为什么
extern int i;
是一个声明(没有内存分配),而
int i;
是一个定义(内存已分配)。
不是两个语句都只声明一个变量i为int,只有一个声明它是一个全局变量吗?
【问题讨论】:
-
那么定义应该如何?
-
恕我直言,Steve Jessop's answer to that question 非常好。 C 语言中也有全局变量的“暂定定义”的想法。你可以写
int i; int i; int i;,它和int i;一样(你可以用static int i;做同样的事情,只要他们都是static)。如果在翻译单元结束之前没有找到外部定义(例如int i = 20;),则在翻译单元末尾隐含int i = 0;完成,创建一个外部定义。但是链接必须仍然一致,所以static int i; int i;无效
标签: c variables memory declaration extern