在编译器设计中,定义和声明有什么区别?


定义

它识别与变量、函数、类等名称相关的代码或数据。编译器本质上需要定义来指定已声明实体的存储区域。当一个变量被定义时,它会占用一段内存,包括该变量的多个字节。

函数定义生成函数的代码。它只能在一个程序中定义一次程序元素,因为定义是程序元素的唯一需求。声明和定义之间的关系可以是一对多。

声明

它可以确定程序的名称,包括变量、函数、命名空间、类等的名称。没有声明,程序中就不能使用任何名称。

程序元素可以声明多次,并具有不同的定义。只有当使用完全相同的格式创建多个声明时,才能生成各种声明。声明是支持编译器从程序元素的角度进行感知的媒介。

让我们看看定义和声明之间的比较。

定义声明
定义指定属性并导致存储分配。
声明指定类型和不同的属性,但不生成存储分配。
定义中包含的数据仅在翻译期间使用。语言翻译器在翻译期间将类型定义中的数据输入到表中,并且每当在后续声明中引用类型名称时,都会使用表中的数据创建合适的可执行程序,以便在执行期间设置和操作所需的信息对象。
变量声明中包含的数据主要在翻译期间使用,以确定信息对象的存储表示以及存储管理和类型检查目标。
对于特定的名称,C 程序只能有一个定义。
对于特定的名称,C 程序可以有多个兼容的声明。
类型定义使翻译的一些元素(包括确定存储表示)仅对单个类型定义完成一次。
类型声明对不同的声明多次确定存储表示。
在语言中包含类型定义通常不会修改语言执行的运行时组织。
在语言中包含类型定义可能会更改语言的运行时组织,因为它们用于设置运行时数据对象。

更新于: 2021年10月22日

378 次浏览

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告