编译器如何知道变量是全局变量还是本地变量(C)

时间:2012-11-12 11:06:03

标签: c++ c compiler-construction

我想知道编译器内部会发生什么...... 比如它是否将全局变量存储在不同的位置。

3 个答案:

答案 0 :(得分:3)

符号表上的维基百科页面可以为您提供基本的理解。

http://en.wikipedia.org/wiki/Symbol_table

  

在计算机科学中,符号表是a使用的数据结构   语言翻译,如编译器或解释器,每个   程序源代码中的标识符与信息相关联   与其在声明中的声明或出现有关,等   类型,范围级别,有时还有其位置。

     

[...]

     

常见的实现技术是使用哈希表   实现。 编译器可以为所有人使用一个大符号表   符号或使用不同的分离的分层符号表   作用域。

强调我的。

答案 1 :(得分:0)

根据你的声明方式,它知道变量是全局变量还是本地变量。

//declared at namespace scope - global
extern int x;     

int main()
{
   //declared inside a method - local
   int y;
};

答案 2 :(得分:0)

通常有4个范围的任何变量。 使用extern关键字显式地表示变量extern。(默认情况下,全局变量为extern

使用static将变量或函数范围限制为当前文件

根据这一点,内存分配在不同的段

        global: visible in more than one source file
 -- data segement(also differs whether initialised or uninitialized)


        local : visible with in { } it also called function(){} scope
 -- on stack 


        block : {} inside any function another scope of block valiables with in {}

     -- on stack if with in function 


        file : making static variable is limited to it's file scope or 
    current translation unit. -- again data section