在编译器设计中,定义和声明有什么区别?
定义
它识别与变量、函数、类等名称相关的代码或数据。编译器本质上需要定义来指定已声明实体的存储区域。当一个变量被定义时,它会占用一段内存,包括该变量的多个字节。
函数定义生成函数的代码。它只能在一个程序中定义一次程序元素,因为定义是程序元素的唯一需求。声明和定义之间的关系可以是一对多。
声明
它可以确定程序的名称,包括变量、函数、命名空间、类等的名称。没有声明,程序中就不能使用任何名称。
程序元素可以声明多次,并具有不同的定义。只有当使用完全相同的格式创建多个声明时,才能生成各种声明。声明是支持编译器从程序元素的角度进行感知的媒介。
让我们看看定义和声明之间的比较。
定义 | 声明 |
---|---|
定义指定属性并导致存储分配。 | 声明指定类型和不同的属性,但不生成存储分配。 |
定义中包含的数据仅在翻译期间使用。语言翻译器在翻译期间将类型定义中的数据输入到表中,并且每当在后续声明中引用类型名称时,都会使用表中的数据创建合适的可执行程序,以便在执行期间设置和操作所需的信息对象。 | 变量声明中包含的数据主要在翻译期间使用,以确定信息对象的存储表示以及存储管理和类型检查目标。 |
对于特定的名称,C 程序只能有一个定义。 | 对于特定的名称,C 程序可以有多个兼容的声明。 |
类型定义使翻译的一些元素(包括确定存储表示)仅对单个类型定义完成一次。 | 类型声明对不同的声明多次确定存储表示。 |
在语言中包含类型定义通常不会修改语言执行的运行时组织。 | 在语言中包含类型定义可能会更改语言的运行时组织,因为它们用于设置运行时数据对象。 |
广告