2016-11-04 107 views
2

我正在学习ANSI C编程语言,它在介绍中说:C自动变量中是全局变量吗?

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

我猜分配和取消分配变量与java的堆栈帧逻辑工作。全局变量也是自动的吗?由于它们位于整个.c文件的范围内,所以它们会比本地变量少得多地进入和退出堆栈帧。我不知道你从其他文件调用的变量范围是如何工作的。

+0

全局变量有一个固定的地址,它们不是自动的。它们在程序开始时分配,并在整个执行过程中保持这种状态。 –

+0

否。文件范围对象具有静态存储持续时间。 – EOF

+2

否:在没有'static'或'register'(或'extern')关键字的函数中定义的变量是'auto'变量。理论上他们可以用关键字'auto'作为前缀。如果你实际添加了关键字(见证C++已经完全接受了它的完全不同的目的),那么你应该被枪杀 - 如果你在生产C中遇到了关键字,你应该把编写'auto'的人放在流下并使他们悔改自己的恶行。 –

回答

2

不,这些概念不会互相玩。术语全局变量是一种非正式的概念,指的是具有外部联系的变量。根据定义,自动变量没有链接,因此变量是无意义的,既是自动的也是全局的。

+0

值得一提的是,全局变量和本地变量之间的另一个区别是全局变量是由0初始化的默认情况下,如果我没有错,而本地人默认初始化,对于基本类型,这意味着未定义的值。 –

+1

@ Peregring-lk:关于全局变量是对的。本地人的情况更复杂,因为有多个存储类说明符。例如,带有'static'关键字的局部变量也是零初始化的。 OTOH,自动变量(隐含'auto'说明符的变量)没有任何隐式初始化 - 它们是不确定的,直到明确赋值为止。 –