簡體   English   中英

與 gcc 中的 #define 相比,使用 typedef 以何種方式影響程序二進制文件?

[英]In what way does using typedef affect the program binary, compared to #define in gcc?

#define不會以任何方式影響二進制文件或 object 文件,因為它是一個預處理器命令,基本上是復制粘貼內容。

typedef由編譯器處理,所以我想知道它可能以何種方式影響最終的二進制/目標文件,如果使用它,與#define相比會消耗更多資源。

我的期望是typedef的工作方式如下:

  • 編譯器有一些用於類型數據結構的方案。 當一個類型是int (*)[3]時,它有一些結構,例如,意味着“這個類型是一個指針,這里是關於它指向什么的進一步信息”,並且進一步的信息說“這個類型是一個包含 3 個元素的數組,這里是關於元素類型的更多信息,”進一步的信息是“這個類型是一個int 。”
  • 當編譯器處理typedef時,它會記住類型信息(它保存上述數據結構)並將其與聲明為類型別名的標識符相關聯。
  • 當編譯器稍后看到該標識符時,它會用記憶的數據結構替換該類型。

所以最終的結果就好像在標識符出現的所有地方都再次使用了typedef中的原始類型一樣(調整C規則來匹配,比如多次定義或不定義結構類型的規則)。

然而,這只是編譯器生成 object 代碼(或后來變成 object 代碼的中間代碼)所需的活動。 但是編譯器做的不止於此; 它還記錄調試信息。 你說“預處理器宏就像復制粘貼,就像它們從未存在過一樣”,但這並不完全正確; 編譯器可能會記錄有關宏的信息,以便它可以生成更好的診斷信息,幫助用戶了解宏替換是如何導致特定錯誤的。 您可以在一些 Clang 錯誤消息中看到這一點。 同樣,雖然編譯器可能會用類型信息替換typedef名稱,但它也可能會保留一些信息並將其包含在 output 文件中以幫助調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM