Caractères non-ASCII en C

Je regardais le code source d’exécution de google go (à l’ adresse https://go.googlecode.com/hg/src/pkg/runtime/ ) et il semble qu’ils utilisent un caractère spécial pour leurs noms de fonction, (Regardez par exemple sur https://go.googlecode.com/hg/src/pkg/runtime/cgocall.c ). Est-ce accepté par les principaux compilateurs? Ce n’est pas ANSI C, n’est-ce pas? Ou est-ce juste une magie macro?

Je vous remercie!

    C90 n’autorise pas de caractère supplémentaire dans l’identificateur (par rapport à ceux du jeu de caractères de base), C99 le fait (avec la syntaxe de caractère universel – \ uXXXX et \ UXXXXXXXX – et un jeu de caractères défini par l’implémentation).

    6.4.2.1/1 en C99:

     identifier: identifier-nondigit identifier identifier-nondigit identifier digit identifier-nondigit: nondigit universal-character-name other implementation-defined characters nondigit: one of _ abcdefghijklm nopqrstuvwxyz ABCDEFGHIJKLM NOPQRSTUVWXYZ digit: one of 0 1 2 3 4 5 6 7 8 9 

    Je ne sais pas à quel point il est supporté par les implémentations C, je sais que le compilateur Plan9 C pourrait gérer d’autres caractères avant qu’il ne soit normalisé.

    Voulez-vous dire le point? Il s’agit du code de caractère 183 issu de l’ISO 8859-1 (ISO Latin-1) – il s’agit d’un code ASCII étendu correspondant (apparemment) à la virgule géorgienne, également appelé “point central”. C’est en fait un caractère juridique.

    La norme C99 “autorise” (pour les valeurs suffisamment faibles de “autoriser”) les “caractères étranges”

    5.1.1.2 Phases de traduction

    1 La priorité parmi les règles de syntaxe de traduction est spécifiée par les phases suivantes.

    1. Les caractères multi-octets du fichier source physique sont mappés, si nécessaire, par rapport au jeu de caractères source (introduisant des caractères de nouvelle ligne pour les indicateurs de fin de ligne). Les séquences de sortinggraphes sont remplacées par des représentations internes à un caractère correspondantes.

    L’utilisation de ce point central est discutée ici:

    http://code.google.com/p/go/issues/detail?id=793

    Fondamentalement, l’utilisation de ce point ne fait pas partie de la spécification, mais il y a des cas où cela est nécessaire. Amorçage, exécution ou assemblage.