来自外部变量Wiki:
如果extern关键字和初始化值都不存在,则该语句可以是声明或定义.由编译器来分析程序的模块并做出决定.
我无法完全理解关于C的这个陈述的含义.例如,它是否意味着:
int i;
Run Code Online (Sandbox Code Playgroud)
不一定是声明(因为我一直假设到现在为止),但可能是一个定义,以及(通过定义和声明在同一网页的定义,没有双关语意)?
简而言之,就是上述陈述:a.只是声明,或b.声明+定义?
参考:变量声明和定义
收到的答复摘要:
Run Code Online (Sandbox Code Playgroud)Declaration Definition Tentative Definition Initialized int i; (inside a block) Yes Yes No No int i=5; (inside a block) Yes Yes No Yes(to 5) int i; (otherwise) Yes No Yes Yes(to 0) extern int i; Yes No No No All definitions are declarations but not vice-versa.
C11在第6.7节中规定了哪些声明也是定义:
标识符的定义是该标识符的声明:
- 对于对象,导致为该对象保留存储;
[...]
我没有找到一个完整的列表,其中列出了哪些对象声明会导致保留存储空间.直观地说,我很清楚,但是我无法从C11标准中获得这些信息.