Schrägstriche und Punkte in Funktionsnamen und Prototypen in der C-Quelle von Go
Der C-Quellcode von Go, am Beispiel der Datei „race.c“, enthält eine nicht standardmäßige Zeichenverwendung, die Fragen zu ihrer Gültigkeit aufwirft.
Erweiterung zu C Standard
Der für Go verwendete C-Compiler, der auf dem Plan 9 C-Compiler basiert, erweitert den Standard um Unterstützung für UTF-8-Zeichen in Bezeichnern. Eine bemerkenswerte Erweiterung ist die spezielle Behandlung des Middot-Zeichens (·).
Middot- und Namespace-Trennung
Der Middot dient als Namespace-Trennzeichen im internen Verknüpfungsprozess von Go. Beim Kompilieren einer C-Datei mit UTF-8-Bezeichnern wird der Mittelpunkt in Objektdateien in einen Punkt (.) übersetzt. Der Go-Linker interpretiert diesen Punkt als Namespace-Trennzeichen.
Beispiel
Betrachten Sie den folgenden C-Code, der in UTF-8 ohne BOM geschrieben wurde:
<code class="c">void ·Bar1() {} void foo·bar2() {} void foo∕baz·bar3() {}</code>
Das Kompilieren dieses Codes erzeugt die folgenden Symbole:
$ go tool 8c example.c $ go tool nm example.8 T "".Bar1 T foo.bar2 T foo∕baz.bar3
Beachten Sie, dass „“Bar1() hat ein großes B, um es für Go-Code sichtbar zu machen. Es entspricht der Go-Funktion „func Bar1() {}“ hinsichtlich des resultierenden Symbols.
Der „Leere“ Namespace
Der „“ Namespace ist ein spezieller Namespace, der als Platzhalter verwendet wird. Beim Importieren eines Pakets unter Verwendung dieses Namespace, wie in:
<code class="go">import examp "path/to/package/example" func main() { examp.Bar1() }</code>
Der Linker ersetzt „“ während des Imports durch den tatsächlichen Paketpfad. Somit finden wir in der verknüpften Binärdatei das folgende Symbol:
T path/to/package/example.Bar1
Fazit
Die Schrägstriche und Mittelpunkte in Gos C-Quelle erweitern den Standard und stellen a Möglichkeit, Namensräume zu benennen und Funktionsnamen zu unterscheiden. Diese Konvention erleichtert das Erstellen und Verknüpfen von Go-Anwendungen.
Das obige ist der detaillierte Inhalt vonWie tragen Schrägstriche und Mittelpunkte im C-Quellcode von Go zum Namensraum und zur Verknüpfung von Funktionen bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!