Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的全局变量是自动变量吗?_C_Variables_Scope_Automatic Variable - Fatal编程技术网

C中的全局变量是自动变量吗?

C中的全局变量是自动变量吗?,c,variables,scope,automatic-variable,C,Variables,Scope,Automatic Variable,我在学习ANSI C编程语言,它在引言中说: 局部变量通常是“自动”的,或者每次调用都会重新创建 我猜分配和释放变量是与Java的堆栈框架逻辑一起工作的。那么,全局变量也是自动的吗?因为它们在整个.c文件的范围内,所以它们进出堆栈帧的次数要比局部变量少得多。不,这些概念彼此不起作用。术语“全局变量”是一个非正式的概念,指具有外部链接的变量。根据定义,自动变量没有链接,因此有自动和全局变量是没有意义的。全局变量有固定地址,它们不是自动的。它们在程序开始时分配,并在整个执行过程中保持这种状态。否:在

我在学习ANSI C编程语言,它在引言中说:

局部变量通常是“自动”的,或者每次调用都会重新创建


我猜分配和释放变量是与Java的堆栈框架逻辑一起工作的。那么,全局变量也是自动的吗?因为它们在整个.c文件的范围内,所以它们进出堆栈帧的次数要比局部变量少得多。

不,这些概念彼此不起作用。术语“全局变量”是一个非正式的概念,指具有外部链接的变量。根据定义,自动变量没有链接,因此有自动和全局变量是没有意义的。

全局变量有固定地址,它们不是自动的。它们在程序开始时分配,并在整个执行过程中保持这种状态。否:在没有
静态
寄存器
(或
外部
)关键字的函数中定义的变量是
自动
变量。理论上,它们的前缀可以是关键字
auto
。如果你添加关键字(见证C++完全已经完全不同的目的),如果你在生产C中遇到关键字,你应该被枪毙,你应该把写汽车的人带到小屋后面,让他们为自己的邪恶行径忏悔。可能是@JonathanLeffler的翻版我喜欢你激进的方式。用与C++中创建C数组相同的子弹,在C++中用“新< /代码>”射击它们;我是说不可能用存储类
auto
创建全局变量。存储类
auto
拒绝变量为全局变量的可能性;全局变量否认它是自动变量的可能性。(在标准C中,创建存储类为
register
的全局变量也是不可能的;
register
拒绝全局变量,反之亦然。)值得一提的是,全局变量和局部变量之间的另一个区别是,如果我没有错的话,全局变量默认为零初始化,而局部变量默认为初始化,对于基元类型,表示未定义的值。@Peregring lk:全局变量是这样的。局部变量的情况更为复杂,因为存在多个存储类说明符。例如,带有
static
关键字的局部变量也被初始化为零。此外,自动变量(带有隐式
auto
说明符的变量)没有任何隐式初始化-在明确指定值之前,它们是不确定的。