当我在编译器级别声明变量时会发生什么?

时间:2015-10-06 05:10:31

标签: compiler-construction language-agnostic

我试图理解在声明变量/函数时编译器级别到底发生了什么?我试着在网上找到它。但我只获得有关声明与定义之间差异的信息。

2 个答案:

答案 0 :(得分:2)

编译器将变量定义行输入到适当范围的符号表中,该表包含名称,类型,修饰符......

答案 1 :(得分:0)

编译器实际上保留了一个标识符,并注意到不同的特性,例如数据类型,程序区域(范围)的范围,它是“已知”的,以及其他属性,如生命周期,可访问性,命名空间......信息输入表格。

从那时起,根据声明解释对同一范围内的此标识符的引用,并检查其一致性。如果在使用标识符之前没有看到声明,编译器将发出错误消息并自行尝试定义,以便继续编译。

在程序的某个地方,必须定义相同的实体。除了声明所做的之外,定义将通过将一些存储空间映射到它并为其分配初始值来“体现”标识符。链接器需要此附加信息。如果它丢失,编译器将保持沉默,因为程序在语法上是有效的。只有链接器会抱怨。