在c

时间:2015-04-22 12:05:18

标签: c variables definition variable-declaration

我知道这是一个声明:

int i;

这是一个定义:

int i = 10;

可能是我错了我不会争辩。

问题是编译器是否为声明的(但未定义的)变量留出内存?

3 个答案:

答案 0 :(得分:4)

定义是为变量分配存储的时间。声明并不意味着存储已经分配。

声明用于访问在不同源文件或库中定义的函数或变量。定义类型和声明类型之间的不匹配会生成编译器错误。

以下是C:

中非定义声明的一些示例
extern char example1;
extern int example2;
void example3(void);

来自C standard (n1256)

6.7声明
...
5声明指定一组标识符的解释和属性。

标识符的 定义 是该标识符的声明:
- 对于一个对象,导致为该对象保留存储;
- 对于一个函数,包括函数体; 101)
- 对于枚举常量或typedef名称,是(唯一)声明 标识符。

答案 1 :(得分:3)

  

"编译器是否为已声明(但未定义)的变量留出内存?"

没有。编译器仅为变量定义(在时间)分配内存,而不是在变量声明上。

您可以使用简单的类比更好地理解逻辑,单个变量允许多重声明,但不允许多重定义。

答案 2 :(得分:2)

  

编译器是否为声明的(但未定义的)预留内存   变量

不,编译器只记下这个变量名和类型。没有为声明分配内存。

如果使用int i;(未优化),{p> i可以表现为定义,i的{​​{3}}出现在任何其他编译单元中,并且将保留存储空间它。 (因为存储是为定义保留的)