Are dollar-signs allowed in identifiers in C++03? bedeutet, dass Dollarzeichen in Bezeichnern in C++ 03 nicht zulässig sind. GCC stellt es als C extension zur Verfügung und gibt ordnungsgemäß eine Diagnose im C++ 03-Modus. In C++ 11 wird jedoch int $ = 0
ohne Warnung kompiliert.Erlaubt C++ 11 Dollarzeichen in Bezeichnern?
Diese answer Gründe dafür, dass $
weil keine Diagnose erlaubt sein kann Implementierung definiert Bezeichner erforderlich ist: auch
The answer here is "Maybe": According to §2.11, identifiers may consist of digits and identifier-nondigits, starting with one of the latter. identifier-nondigits are the usual
a-z
,A-Z
and underscore, in addition since C++11 they include universal-character-names (e.g.\uBEAF
,\UC0FFEE32
), and other implementation-defined characters. So it is implementation defined if using$
in an identifier is allowed. VC10 and up supports that, maybe earlier versions, too. It even supports identifiers likeこんばんわ
.But: I wouldn't use them. Make identifiers as readable and portable as possible.
$
is implementation defined and thus not portable.
Diese Sprache ist in der C++ 03-Standard, so dass ich das nicht finden ein sehr überzeugendes Argument sein.
§2.10/2
In addition, some identifiers are reserved for use by C++ implementations and standard libraries (17.6.4.3.2) and shall not be used otherwise; no diagnostic is required.
, was in der Standardänderung ermöglicht $
als Identifikator Name verwendet werden?
Clang warnt vor diesem. –
@Shafik Verwirrend genug, das [Antwort] (http://stackoverflow.com/a/14595459/3920237) Links zu alten GCC-Dokumentation, die explizit besagt, dass C++ in Bezeichnern $ verboten. Sie haben es nach [preprocessor options] verschoben (https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html # Preprocessor-Optionen) mit der einzigen Beschreibung 'Accept '$' in Bezeichnern.' –
In der Vergangenheit verwendete DEC $ in allen Systemdienst- und Bibliotheksfunktionsnamen mit $$ in allen internen Funktionen. Alle DEC-Compiler sind entweder Erweiterungen, die $ -Symbolnamen oder Pragmas für das Mapping erlauben (wie bei ADA). – user3344003