在c中声明vs定义变量
这个问题在这里已经有了答案:
编译器是否为已声明(但未定义)的变量留出内存?
不,编译器只是记下这个变量的名称和类型。 没有内存分配给声明。
int i;
可以像使用i
(未优化)那样表现为定义,并且在其他编译单元中不存在其他i
定义,并且将为其保留存储空间。 (因为存储是为定义保留的)
定义是何时为变量分配存储空间。 声明并不意味着存储已分配。
声明用于访问在不同源文件或库中定义的函数或变量。 定义类型和声明类型之间的不匹配会产生编译器错误。
这里有一些不是定义的声明的例子,在C:
extern char example1;
extern int example2;
void example3(void);
从C标准(n1256):
6.7声明...
5声明指定了一组标识符的解释和属性。
标识符的定义是对该标识符的声明:
- 对于一个对象,导致为该对象保留存储空间;
- 对于功能,包括功能体; 101)
- 对于枚举常量或typedef名称,是标识符的(唯一)声明。
“编译器是否为已声明(但未定义)的变量留出了内存?”
不。编译器仅为变量定义分配内存(而不是变量声明)。
您可以使用简单的比喻来更好地理解逻辑,对于单个变量允许多重声明,但多重定义不允许。
链接地址: http://www.djcxy.com/p/40621.html