Go 的C 原始碼中函數名稱和原型中的斜線和點
Go 的C 原始碼,如race.c文件所示,合併了非標準字元的使用,引發了對其有效性的質疑。
C 標準的擴展
用於Go 的C 編譯器,植根於Plan 9 C 編譯器,透過支援標識符中的UTF-8 字元擴展了標準。一個值得注意的擴展是對中點字元 (·) 的特殊處理。
中點與命名空間分離
中點在 Go 的內部連結過程中充當命名空間分隔符。當編譯具有 UTF-8 標識符的 C 檔案時,中點將轉換為目標檔案中的點 (.)。 Go 連結器將此點解釋為名稱空間分隔符號。
範例
考慮以下以UTF-8 編寫的不帶BOM 的C 程式碼:
編譯此程式碼會產生以下符號:
請注意,「」Bar1() 有一個大寫的B,使其對 Go 程式碼可見。就結果符號而言,它相當於 Go 函數「func Bar1() {}」。
「空」命名空間
「」命名空間是用作佔位符的特殊命名空間。使用此命名空間匯入套件時,如:
連結器在匯入過程中將「」替換為實際的套件路徑。因此,在連結的二進位檔案中,我們將找到以下符號:
結論
Go 的C 原始程式碼中的斜線和中點擴展了標準,提供了命名空間和區分函數名稱的方式。此約定有助於建立和連結 Go 應用程式。
以上是Go 的 C 原始碼中的斜杠和中點如何有助於函數命名空間和連結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!