c - 静态和;装配中的非静态变量

时间:2014-10-11 15:42:49

标签: c assembly

问题1 :以下陈述是否正确:

  

在c文件中,未标记为static的变量外部函数具有从其定义到文件末尾的范围。

问题2 :如果问题1的答案是 true ,那么当c程序编译成汇编代码时,在哪个部分中存储了问题1中提到的变量?

@Edit:

  

我问这个问题,因为我对标有静态变量的变量有点困惑,变量没有用静态标记。对于这两种变量,装配中的底板有什么不同,它们存放在哪里?如果它们都存储在数据部分,那么c如何确保标记为static的变量仅对定义它的文件可见。


@Answer:

  

根据答案&来自莫斯科的 @Vlad 的评论,对问题1的回答是正确的,问题2的答案是“数据部分”,以及staic变量仅对文件定义的可见原因是静态变量具有内部链接,以确保它在声明它的编译单元外部不可见。

1 个答案:

答案 0 :(得分:1)

根据C标准(6.2.1标识符范围)

  

4每个其他标识符的范围由其放置位置决定   声明(在声明者或类型说明符中)。如果是声明者或   声明标识符的类型说明符出现在any之外   块或参数列表,标识符有文件范围,其中   终止于翻译单元的末尾。

这是你第一个问题的答案。

至于第二个问题,那么变量存储在数据部分并具有静态存储持续时间。

编辑:使用存储类说明符static声明的变量具有内部链接,它们在定义它们的编译单元外部不可见。