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?
risposta
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).
Sono illegali. Gli unici caratteri legali negli identificatori sono lettere, numeri e _. Anche gli identificatori non possono iniziare con i numeri.
FYI: Anche se illegale dallo standard gcc di solito li consente, vedi http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs – lothar
Questo per consentire la retrocompatibilità. Non dovrebbe essere usato per alcun codice moderno. –
Non sono legali in C++. Tuttavia alcuni linguaggi derivati da C/C++ (come Java e JavaScript) li consentono.
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).
% è anche l'operatore modulo. – RBerteig
Ah, grazie. Mi era sfuggito di mente. –
Non dimenticare il carattere @ –
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.
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ò.
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.
- 1. C++ 11 consente la presenza di segni di dollaro negli identificatori?
- 2. Quattro segni di dollaro nel Makefile
- 3. java classi compilate contengono i segni del dollaro
- 4. lambda in C++ 03
- 5. Cosa rappresentano i segni di dollaro ($) e percentuale (%) nell'assembly intel x86?
- 6. Gli indici di array negativi sono consentiti in C?
- 7. Quali sono i segni dell'inizializzazione delle croci?
- 8. Perfetto Inoltro in C++ 03
- 9. Attributi che non sono identificatori Python validi
- 10. Come fare riferimento agli identificatori con il simbolo del dollaro da C#?
- 11. @ prefisso per identificatori in C#
- 12. Gli operatori di conversione espliciti sono consentiti negli elenchi di inizializzazione rinforzati?
- 13. Ottieni identificatori di sistema univoci in C#
- 14. I letterali ottali non sono consentiti in modalità rigorosa
- 15. Come faccio a rimuovere i segni del dollaro da un valore prima della convalida in Rails?
- 16. Quali sono i caratteri consentiti in una parola chiave Clojure?
- 17. I puntatori sono consentiti come chiavi nei contenitori STL ordinati?
- 18. Riferimento collasso sotto C++ 03
- 19. sono caratteri # o consentiti in xml?
- 20. I caratteri cinesi sono ammessi negli URL?
- 21. Come rimuovo lettere e trattini e segni di dollaro in una stringa usando un'espressione regolare?
- 22. Dove sono identificati identificatori come NSControlKeyMask
- 23. Perché alcuni identificatori nella libreria C++ standard sono brevi?
- 24. Errore: i cicli 'for' basati su intervallo non sono consentiti in modalità C++ 98
- 25. Sono consentiti tutti i metodi non definiti non utilizzati?
- 26. Perché i membri protetti sono consentiti nelle classi java finali?
- 27. Quali permessi di riflessione sono consentiti in Medium Trust?
- 28. Perché non ci sono funzionalità di riallocazione negli allocatori C++?
- 29. Quali caratteri sono consentiti in un nome di attributo HTML?
- 30. Cosa significano i caratteri dollaro, at-sign e punti e virgola negli elenchi parametri Perl?
@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. –
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
@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