Maison > développement back-end > Golang > 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
Libérer: 2024-11-08 12:11:01
original
616 Les gens l'ont consulté

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>
Copier après la connexion

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
Copier après la connexion

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>
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal