是否可以得出结论,唯一的变量声明类型是“extern声明”?
众所周知,以下代码定义(不是声明)x
,因为它为变量x
分配内存(KR第4章) 。通常情况下,我们通常会说我们声明x
(但不是初始化)。
int x; // <-- definition NOT declaration
我能找到的唯一声明示例是使用关键字extern
:
extern int x;
extern int a[];
除了 extern声明之外还有其他变量声明情况吗?
答案 0 :(得分:2)
定义是带存储的声明。从标准:
6.7声明3 / 声明指定一组标识符的解释和属性。 标识符的定义是该标识符的声明 的是:
- 对于一个对象,导致为该对象保留存储;
- 对于一个函数,包括函数体; 119)
- 对于枚举常量,是(唯一)声明 标识符;
- 对于typedef名称,是第一个(或仅限) 声明标识符。
然后函数原型是一个声明,如果用于前向声明,则可能不合格extern
。一个
有关详细信息,请阅读标准,第6.7节。
答案 1 :(得分:-2)
使用extern,主要用于函数存在于另一个文件(源代码或对象库)中的函数。
auto用于堆栈变量,但由于它是默认的,很少有人明确表示它。
static用于静态变量,即使函数退出也是如此。函数退出时自动变量会丢失,因此静态变量通常用于总计数,用户设置,状态设置,这可能会发生变化,但在程序运行的整个过程中都会使用。