C语言中的变量声明和作用域
下面是一段代码片段C语言中的变量声明和作用域,c,C,下面是一段代码片段 int var1; extern int var2; 这是一个选择题。 答案是,第一条语句声明并定义var1,但第二条语句只声明var2。 但我认为应该是“两个语句都只声明变量,不定义它们。” 哪一个是正确的?这可能会有所帮助 变量的声明用于通知编译器 以下信息:变量的名称、它所持有的值的类型 以及初始值(如果需要)。i、 例如,声明给出了细节 关于变量的属性。鉴于,变量的定义 表示变量的存储位置。i、 例如,变量的内存为 在变量定义期间分配 在C语言中,变量的定义和声明发
int var1;
extern int var2;
这是一个选择题。
答案是,第一条语句声明并定义var1,但第二条语句只声明var2。
但我认为应该是“两个语句都只声明变量,不定义它们。”
哪一个是正确的?这可能会有所帮助
变量的声明用于通知编译器
以下信息:变量的名称、它所持有的值的类型
以及初始值(如果需要)。i、 例如,声明给出了细节
关于变量的属性。鉴于,变量的定义
表示变量的存储位置。i、 例如,变量的内存为
在变量定义期间分配
在C语言中,变量的定义和声明发生在
同时。i、 e.声明和声明之间没有区别
定义。例如,考虑下面的声明
int a;
在此,变量名a和数据类型等信息:
int,它被发送到将存储在数据中的编译器
结构称为符号表。除此之外,还有一个大小为2的内存
将分配字节(取决于编译器的类型)
假设,如果我们只想声明变量而不想定义它
i、 我们不想分配内存,那么下面的声明
可以使用
extern int a;
在本例中,仅发送和发送有关变量的信息
没有进行内存分配。上面的信息告诉编译器
变量a现在声明,而它的内存将
稍后在同一文件或不同文件中定义
这可能会有帮助
变量的声明用于通知编译器
以下信息:变量的名称、它所持有的值的类型
以及初始值(如果需要)。i、 例如,声明给出了细节
关于变量的属性。鉴于,变量的定义
表示变量的存储位置。i、 例如,变量的内存为
在变量定义期间分配
在C语言中,变量的定义和声明发生在
同时。i、 e.声明和声明之间没有区别
定义。例如,考虑下面的声明
int a;
在此,变量名a和数据类型等信息:
int,它被发送到将存储在数据中的编译器
结构称为符号表。除此之外,还有一个大小为2的内存
将分配字节(取决于编译器的类型)
假设,如果我们只想声明变量而不想定义它
i、 我们不想分配内存,那么下面的声明
可以使用
extern int a;
在本例中,仅发送和发送有关变量的信息
没有进行内存分配。上面的信息告诉编译器
变量a现在声明,而它的内存将
稍后在同一文件或不同文件中定义
实际上,
extern
关键字扩展了C变量和C函数的可见性
声明变量还是定义变量?
变量/函数的声明只是声明变量/函数存在于程序中的某个地方,但没有为它们分配内存
片段1:
extern int var;
int main(void)
{
var = 10;
return 0;
}
代码段1在编译时引发错误。因为var是声明的,但没有在任何地方定义。本质上,var没有分配任何内存。程序试图将一个根本不存在的变量的值改为10
片段2:
#include "somefile.h"
extern int var;
int main(void)
{
var = 10;
return 0;
}
假设“somefile.h”具有变量的定义,代码片段2将被成功编译。实际上,
extern
关键字扩展了C变量和C函数的可见性
声明变量还是定义变量?
变量/函数的声明只是声明变量/函数存在于程序中的某个地方,但没有为它们分配内存
片段1:
extern int var;
int main(void)
{
var = 10;
return 0;
}
代码段1在编译时引发错误。因为var是声明的,但没有在任何地方定义。本质上,var没有分配任何内存。程序试图将一个根本不存在的变量的值改为10
片段2:
#include "somefile.h"
extern int var;
int main(void)
{
var = 10;
return 0;
}
假设“somefile.h”具有变量的定义,代码片段2将被成功编译。答案取决于几个因素 如果这些声明
int var1;
extern int var2;
如果是块范围声明,那么第一个声明也是一个定义,第二个声明只是一个没有定义的声明。变量var1
未初始化,因为它的值不确定
如果这些声明是文件范围的声明,那么第一个声明是否是定义取决于该声明是否具有外部定义
如果该声明没有外部定义,则此名为暂定定义的声明是一个定义,且其隐式初始值设定项等于0
至于第二个声明,它是否是定义取决于是否有外部定义。如果没有外部定义,则链接器可以创建定义或发出错误
在C语言中,带有文件作用域的声明如果有初始值设定项,或者是没有外部定义的暂定定义,那么它也是一个定义。答案取决于几个因素 如果这些声明
int var1;
extern int var2;
如果是块范围声明,那么第一个声明也是一个定义,第二个声明只是一个没有定义的声明。变量var1
未初始化,因为它的值不确定
如果这些声明是文件作用域的声明,那么第一个声明是否是定义将被忽略