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

Compiler construction 当我在编译器级别声明变量时,会发生什么?,compiler-construction,language-agnostic,Compiler Construction,Language Agnostic,我试图理解当我声明一个变量/函数时,编译器级别到底发生了什么?我试着在网上找到它。但是我只得到了声明和定义之间差异的信息。编译器将变量定义行输入到适当范围的符号表中,该表包含名称、类型、修饰符等。编译器基本上保留了一个标识符,并注意到不同的特征,例如数据类型,程序区域(范围)“已知”的范围和其他属性,如生存期、可访问性、命名空间。。。此信息输入到表格中 从那时起,在同一范围内对该标识符的引用将根据声明进行解释并检查一致性。如果在使用标识符之前未看到任何声明,编译器将发出错误消息,并自行尝试定义以

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

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

编译器基本上保留了一个标识符,并注意到不同的特征,例如数据类型,程序区域(范围)“已知”的范围和其他属性,如生存期、可访问性、命名空间。。。此信息输入到表格中

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


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

“在编译器级别声明变量/函数”请解释这意味着什么。我所知道的任何语言都没有使用过这样的术语。也许举个例子会有所帮助。例如,extern int var表示我们正在声明一个变量,而int var=1表示我们正在定义它。现在我明白了,当我们定义一个变量时,意味着内存被分配给它。当我们声明变量时,编译器级别会发生什么?@n.m.:您应该阅读“当…时,编译器级别会发生什么”。