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!