2015-10-06 58 views
0

我想知道什么确实发生在编译器级别时,我声明一个变量/函数?我试着在网上找到它。但是我只能获得有关声明与定义之间区别的信息。当我在编译器级声明一个变量时会发生什么?

+1

“在编译器级别声明变量/函数”请解释它的含义。我所知道的任何语言都使用这样的术语。也许一个例子会有所帮助。 –

+0

例如,extern int var表示我们正在声明一个变量,而int var = 1表示我们正在定义它。现在我明白了,当我们定义一个意味着内存分配给它的变量。当我们声明一个变量时,编译器级会发生什么? – AlienOnEarth

+1

@n.m .:你应该阅读“什么时候发生在编译器级......”。 –

回答

2

编译器进入可变定义行到适当范围的符号表,其中包含的名称,类型,改性剂,...

0

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

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

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

相关问题