2009-06-01 20 views
16

Che cosa dice lo standard C++ sull'uso dei segni del dollaro negli identificatori, come ad esempio Hello$World? Sono legali?I segni di dollaro sono consentiti negli identificatori in C++ 03?

+3

@Zifre: Credo che stia chiedendo lo standard C++ in modo specifico in quanto non tutti i compilatori sono conformi allo standard del 100% e alcuni hanno le proprie estensioni che potrebbero renderlo legale. –

+3

Lo standard C99 consente esplicitamente a una piattaforma di definire ulteriori caratteri identificativi legali. Il compilatore Decus C per PDP11 e VAX consentiva $, poiché la maggior parte delle chiamate di sistema includeva $ nel loro nome. "$ È riservato al digitale". Non ho gli standard C più vecchi o lo standard C++ a portata di mano per verificare se sarebbe stato conforme ... – RBerteig

+8

@Zifre: Il tuo commento era più necessario?E dal momento che è necessario chiedere, no, non poteva semplicemente provarlo nel suo compilatore preferito, perché questo gli avrebbe detto se il compilatore lo permetteva, non se la lingua lo fosse. In C++, questa è una distinzione importante. – jalf

risposta

16

Un identificatore C++ può essere composto da uno dei seguenti elementi: _ (carattere di sottolineatura), le cifre 0-9, le lettere a-z (sia maiuscole che minuscole) e non può iniziare con un numero.

Esistono numerose eccezioni in quanto C99 consente estensioni dello standard (ad esempio visual studio).

+3

Questo è sciocco che è permesso in VS. MS * always * deve estendere le proprie estensioni allo standard ... – Zifre

+15

Ogni compilatore C++ ha una buona quantità di estensioni. MS non è unico in questo. – jalf

+11

GCC consente anche segni di dollaro. –

14

Sono illegali. Gli unici caratteri legali negli identificatori sono lettere, numeri e _. Anche gli identificatori non possono iniziare con i numeri.

+4

FYI: Anche se illegale dallo standard gcc di solito li consente, vedi http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs – lothar

+3

Questo per consentire la retrocompatibilità. Non dovrebbe essere usato per alcun codice moderno. –

0

Non sono legali in C++. Tuttavia alcuni linguaggi derivati ​​da C/C++ (come Java e JavaScript) li consentono.

0

Illegale. Penso che il segno del dollaro e il backtick siano gli unici segni di punteggiatura sulla mia tastiera che non sono usati in C++ da qualche parte (il segno "%" è nelle stringhe di formato, che sono in C++ per riferimento allo standard C).

+7

% è anche l'operatore modulo. – RBerteig

+0

Ah, grazie. Mi era sfuggito di mente. –

+5

Non dimenticare il carattere @ –

8

Non legale, ma molti se non la maggior parte dei compilatori li supportano, si noti che ciò può dipendere dalla piattaforma, pertanto gcc on arm non li supporta a causa delle restrizioni di assemblaggio.

1

La sezione pertinente è "2.8 Identificatori [lex.name]". Dal set di caratteri di base, gli unici caratteri validi sono A-Z a-z 0-9 e _. Tuttavia, sono ammessi anche caratteri come é (U + 00E9). A seconda del compilatore, potrebbe essere necessario inserire é come \ u00e9, però.

11

In C++ 03, le risposte fornite in precedenza sono corrette: sono illegali. Nel C++11 la situazione è cambiata però:

La risposta qui è "Forse":
Secondo §2.11, identificatori possono consistere in cifre e identificatore-nondigits, a partire da uno di questi ultimi . identificatore-nondigits sono i soliti a-z, A-Z e sottolineare, inoltre dal C++ 11 che includono universale caratteri nomi (ad esempio \uBEAF, \UC0FFEE32), e altri caratteri di attuazione definite. Quindi è definita l'implementazione se si utilizza $ in un identificatore. VC10 e versioni successive supportano questo, forse anche le versioni precedenti. Supporta anche identificatori come こんばんは.

Ma: Non li userei. Rendi gli identificatori più leggibili e portatili possibile. $ è l'implementazione definita e quindi non portatile.

Problemi correlati