[英]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.