局部变量存在于何处?

时间:2017-12-15 01:38:24

标签: c local-variables

Local variables existence

很抱歉,如果这不是正确的地方,但我已尝试到处寻找,但这个问题非常具体。我认为局部变量存在于,它们被声明到函数的末尾从范围的开头到范围的末尾,这是正确的吗?

1 个答案:

答案 0 :(得分:3)

四种选择中最好的一种是:

  

从范围的开头到范围的结尾。

如果我们假设“范围的开头”意味着“块的开头”。

从技术上讲,标识符的范围从其声明开始。如果我们采用这种解释,那么前两个选项都是相同的,这没有多大意义。 IMO可以安全地假设它们意味着块的开始。

(块的结尾和范围的结尾被定义为相同,因此结尾没有问题。)

单词存在明确指的是变量的生命周期。变量在其生命周期开始时开始存在,并在其生命周期结束时停止存在。变量的生命周期可能与其标识符的可见性不同;因此,如评论中所建议的那样,将这两件事等同起来是不正确的。

“局部变量”(在块范围内定义的非静态变量的常用术语)的生命周期由6.2.4 / 6给出:

  

对于没有可变长度数组类型的对象,其生命周期从entry进入与其关联的块,直到该块的执行以任何方式结束

第一个答案是最适合粗体文本,尽管粗体文本更正确,因为执行不一定在开始时进入块(例如goto)并且执行不一定离开块结束(例如breakreturn)。

因为问题要求选择适用的所有答案;应该选择前两个答案。第二个答案是第一个答案的一个子集。

最后两个显然是错误的。

其他相关标准报价

生命周期的定义见6.2.4 / 2:

  

对象的生命周期是程序执行的一部分,在此期间保证为其保留存储。

与块相关联的范围的定义在6.2.1 / 4中:

  

如果声明标识符的声明符或类型说明符出现在块内或函数定义中的参数声明列表中,则标识符具有块作用域,该作用域终止于   相关区块。

是6.2.1 / 2:

  

对于标识符指定的每个不同实体,标识符仅在名为范围的程序文本区域内可见(即可以使用)。

阐明每个标识符都有特定的范围(以及被描述为具有块范围)。