Maison  >  Article  >  développement back-end  >  Comment les barres obliques et les points médians dans le code source C de Go contribuent-ils à l'espacement des noms et aux liens des fonctions ?

Comment les barres obliques et les points médians dans le code source C de Go contribuent-ils à l'espacement des noms et aux liens des fonctions ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 12:11:01492parcourir

How do slashes and middots in Go’s C source code contribute to function namespacing and linking?

Slashes et points dans les noms de fonctions et les prototypes dans la source C de Go

Code source C de Go, comme illustré par le fichier race.c, intègre une utilisation de caractères non standard qui soulève des questions sur sa validité.

Extension à C Standard

Le compilateur C utilisé pour Go, ancré dans le compilateur Plan 9 C, étend la norme avec la prise en charge des caractères UTF-8 dans les identifiants. Une extension notable est la gestion spéciale du caractère middot (·).

Séparation du Middot et de l'espace de noms

Le middot sert de séparateur d'espace de noms dans le processus de liaison interne de Go. Lors de la compilation d'un fichier C avec des identifiants UTF-8, le point médian est traduit en point (.) dans les fichiers objets. L'éditeur de liens Go interprète ce point comme un séparateur d'espace de noms.

Exemple

Considérons le code C suivant écrit en UTF-8 sans BOM :

<code class="c">void ·Bar1() {}
void foo·bar2() {}
void foo∕baz·bar3() {}</code>

La compilation de ce code produit les symboles suivants :

$ go tool 8c example.c
$ go tool nm example.8
T "".Bar1
T foo.bar2
T foo∕baz.bar3

Notez que ""Bar1() a un B majuscule pour le rendre visible au code Go. C'est l'équivalent de la fonction Go "func Bar1() {}" en termes de symbole résultant.

L'espace de noms "Vide"

L'espace de noms "" est un espace de noms spécial utilisé comme espace réservé. Lors de l'importation d'un package à l'aide de cet espace de noms, comme dans :

<code class="go">import examp "path/to/package/example"

func main() {
    examp.Bar1()
}</code>

L'éditeur de liens remplace "" par le chemin réel du package lors de l'importation. Ainsi, dans le binaire lié, on retrouvera le symbole suivant :

T path/to/package/example.Bar1

Conclusion

Les barres obliques et les points médians dans le source C de Go étendent le standard, fournissant un moyen d'accéder à l'espace de noms et de différencier les noms de fonctions. Cette convention facilite la création et la liaison des applications Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn