2009-06-01 6 views
16

Que dit la norme C++ à propos de l'utilisation de signes dollar dans les identificateurs, tels que Hello$World? Sont-ils légaux?Les signes dollar sont-ils autorisés dans les identifiants en C++ 03?

+3

@Zifre: Je crois qu'il s'interroge sur le standard C++, car tous les compilateurs ne sont pas 100% conformes à la norme et certains ont leurs propres extensions qui peuvent le rendre légal. –

+3

La norme C99 permet explicitement à une plateforme de définir des caractères d'identification légale supplémentaires. Le compilateur Decus C pour PDP11 et VAX permettait $, car la plupart des appels système incluaient un $ dans leur nom. "Le $ est réservé à Digital". Je n'ai pas les anciennes normes C ou la norme C++ à portée de main pour vérifier si cela aurait été conforme ... – RBerteig

+8

@Zifre: Votre commentaire était-il plus nécessaire?Et puisque vous avez besoin de demander, non, il ne pourrait pas simplement l'essayer dans son compilateur favori, parce que cela lui dirait si le compilateur l'a permis, pas si la langue l'a fait. En C++, c'est une distinction importante. – jalf

Répondre

16

Un identifiant C++ peut être composé de l'un des éléments suivants: _ (trait de soulignement), les chiffres 0-9, les lettres a-z (majuscules et minuscules) et ne peut pas commencer par un nombre.

Il existe un certain nombre d'exceptions car C99 autorise les extensions de la norme (par exemple visual studio).

+3

C'est idiot que c'est autorisé dans VS. MS * always * doit faire ses propres extensions à la norme ... – Zifre

+15

Chaque compilateur C++ majeur a une bonne poignée d'extensions. MS n'est pas unique en cela. – jalf

+11

GCC permet également des signes dollar. –

14

Ils sont illégaux. Les seuls caractères légaux dans les identifiants sont les lettres, les chiffres et _. Les identifiants ne peuvent pas non plus commencer par des nombres.

+4

FYI: Bien que cela soit généralement interdit par la norme gcc, voir http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs – lothar

+3

Ceci permet une compatibilité descendante. Il ne devrait pas être utilisé pour un code moderne. –

0

Ils ne sont pas autorisés en C++. Cependant, certains langages dérivés C/C++ (tels que Java et JavaScript) les autorisent.

0

Illégal. Je pense que le signe dollar et le backtick sont les seuls signes de ponctuation sur mon clavier qui ne sont pas utilisés en C++ quelque part (le signe "%" est dans les chaînes de format, qui sont en C++ par référence au standard C).

+7

% est également l'opérateur de module. – RBerteig

+0

Ah, merci. Cela m'avait échappé. –

+5

Ne pas oublier le caractère @ –

8

Non légal, mais la plupart des compilateurs les supportent, notez que cela peut dépendre de la plate-forme, donc gcc sur le bras ne les supporte pas en raison des restrictions d'assemblage.

1

La section pertinente est "2.8 Identifiants [lex.name]". A partir du jeu de caractères de base, les seuls caractères valides sont A-Z a-z 0-9 et _. Cependant, des caractères comme é (U + 00E9) sont également autorisés. Selon votre compilateur, vous devrez peut-être entrer é comme \ u00e9, cependant.

11

En C++ 03, les réponses données précédemment sont correctes: elles sont illégales. Dans C++11 la situation a changé cependant:

La réponse ici est « Peut-être »:
Selon §2.11, les identifiants peuvent consister en chiffres et identificateur-nondigits, en commençant par un de ces derniers . Identifiant-de nondigits sont les a-z, A-Z et soulignent, en plus depuis C++ 11 ils comprennent noms-caractère universel (par exemple \uBEAF, \UC0FFEE32), et d'autres caractères définis par la mise en œuvre usual. Donc, la mise en œuvre est définie si l'utilisation de $ dans un identificateur est autorisée. VC10 et plus le supporte, peut-être aussi les versions antérieures. Il prend même en charge les identifiants comme こんばんは.

Mais: Je ne les utiliserais pas. Rendre les identifiants aussi lisibles et portables que possible. $ est implémenté défini et donc pas portable.

Questions connexes