在 c 中声明与定义变量
Declaring vs defining variables in c
据我所知,这是一个声明:
int i;
这是一个定义:
int i = 10;
可能我错了我不争。
问题是编译器是否为声明的(但未定义的)变量留出内存?
定义是为变量分配存储空间。声明并不意味着存储已经分配。
声明用于访问在不同源文件或库中定义的函数或变量。定义类型和声明类型之间的不匹配会产生编译器错误。
这里有一些声明不是定义的例子,在 C:
extern char example1;
extern int example2;
void example3(void);
6.7 Declarations
...
5 A declaration specifies the interpretation and attributes of a set of identifiers.
A definition of an identifier is a declaration for that identifier that:
— for an object, causes storage to be reserved for that object;
— for a function, includes the function body;101)
— for an enumeration constant or typedef name, is the (only) declaration of the
identifier.
"Does the compiler set aside memory for the declared (but not defined) variables?"
没有。编译器只为(在)变量定义时分配内存,而不是在变量声明时分配内存。
用一个简单的类比可以更好地理解逻辑,单个变量允许多次声明,但不允许多次定义。
Does the compiler set aside memory for the declared (but not defined)
variables?
不,编译器只是记下这个变量名和类型。没有为声明分配内存。
如果使用 i
(未优化掉)并且 i
的 no other definition 存在于任何其他编译单元中,则 int i;
可以按定义运行,并且存储将是为它预留。 (因为存储是为定义保留的)
据我所知,这是一个声明:
int i;
这是一个定义:
int i = 10;
可能我错了我不争。
问题是编译器是否为声明的(但未定义的)变量留出内存?
定义是为变量分配存储空间。声明并不意味着存储已经分配。
声明用于访问在不同源文件或库中定义的函数或变量。定义类型和声明类型之间的不匹配会产生编译器错误。
这里有一些声明不是定义的例子,在 C:
extern char example1;
extern int example2;
void example3(void);
6.7 Declarations
...
5 A declaration specifies the interpretation and attributes of a set of identifiers.
A definition of an identifier is a declaration for that identifier that:
— for an object, causes storage to be reserved for that object;
— for a function, includes the function body;101)
— for an enumeration constant or typedef name, is the (only) declaration of the identifier.
"Does the compiler set aside memory for the declared (but not defined) variables?"
没有。编译器只为(在)变量定义时分配内存,而不是在变量声明时分配内存。
用一个简单的类比可以更好地理解逻辑,单个变量允许多次声明,但不允许多次定义。
Does the compiler set aside memory for the declared (but not defined) variables?
不,编译器只是记下这个变量名和类型。没有为声明分配内存。
如果使用i
(未优化掉)并且 i
的 no other definition 存在于任何其他编译单元中,则 int i;
可以按定义运行,并且存储将是为它预留。 (因为存储是为定义保留的)