在編譯器設計中,定義和宣告有什麼區別?
定義
它識別與變數、函式、類等名稱相關的程式碼或資料。編譯器本質上需要定義來指定已宣告實體的儲存區域。當一個變數被定義時,它會佔用一段記憶體,包括該變數的多個位元組。
函式定義生成函式的程式碼。它只能在一個程式中定義一次程式元素,因為定義是程式元素的唯一需求。宣告和定義之間的關係可以是一對多。
宣告
它可以確定程式的名稱,包括變數、函式、名稱空間、類等的名稱。沒有宣告,程式中就不能使用任何名稱。
程式元素可以宣告多次,並具有不同的定義。只有當使用完全相同的格式建立多個宣告時,才能生成各種宣告。宣告是支援編譯器從程式元素的角度進行感知的媒介。
讓我們看看定義和宣告之間的比較。
定義 | 宣告 |
---|---|
定義指定屬性並導致儲存分配。 | 宣告指定型別和不同的屬性,但不生成儲存分配。 |
定義中包含的資料僅在翻譯期間使用。語言翻譯器在翻譯期間將型別定義中的資料輸入到表中,並且每當在後續宣告中引用型別名稱時,都會使用表中的資料建立合適的可執行程式,以便在執行期間設定和操作所需的資訊物件。 | 變數宣告中包含的資料主要在翻譯期間使用,以確定資訊物件的儲存表示以及儲存管理和型別檢查目標。 |
對於特定的名稱,C 程式只能有一個定義。 | 對於特定的名稱,C 程式可以有多個相容的宣告。 |
型別定義使翻譯的一些元素(包括確定儲存表示)僅對單個型別定義完成一次。 | 型別宣告對不同的宣告多次確定儲存表示。 |
在語言中包含型別定義通常不會修改語言執行的執行時組織。 | 在語言中包含型別定義可能會更改語言的執行時組織,因為它們用於設定執行時資料物件。 |
廣告