是extern是写一个不是定义的声明的唯一方法吗?

时间:2016-03-04 20:39:54

标签: c

是否可以得出结论,唯一的变量声明类型是“extern声明”?

众所周知,以下代码定义(不是声明x,因为它为变量x分配内存(KR第4章) 。通常情况下,我们通常会说我们声明x(但不是初始化)。

int x; // <-- definition NOT declaration

我能找到的唯一声明示例是使用关键字extern

extern int x;
extern int a[];

除了 extern声明之外还有其他变量声明情况吗?

2 个答案:

答案 0 :(得分:2)

定义是带存储的声明。从标准:

  

6.7声明3 / 声明指定一组标识符的解释和属性。    标识符的定义是该标识符的声明   的是:

     

- 对于一个对象,导致为该对象保留存储;

     

- 对于一个函数,包括函数体; 119)

     

- 对于枚举常量,是(唯一)声明   标识符;

     

- 对于typedef名称,是第一个(或仅限)   声明标识符。

然后函数原型是一个声明,如果用于前向声明,则可能不合格extern。一个

有关详细信息,请阅读标准,第6.7节。

答案 1 :(得分:-2)

使用extern,主要用于函数存在于另一个文件(源代码或对象库)中的函数。

auto用于堆栈变量,但由于它是默认的,很少有人明确表示它。

static用于静态变量,即使函数退出也是如此。函数退出时自动变量会丢失,因此静态变量通常用于总计数,用户设置,状态设置,这可能会发生变化,但在程序运行的整个过程中都会使用。