Einführung in den Aufbau von Bezeichnern in C++ im Rahmen der Lehre des Programmierens mit der Programmiersprache C++. [] (C++ Bezeichner C++ Namen C++ reservierte Bezeichner C++ reservierte Namen C++), Lektion, Seite 720814
https://www.purl.org/stefan_ram/pub/c++_bezeichner_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Aufbau von Bezeichnern in C++

Ein Bezeichner, wie beispielsweise der Bezeichner "ax_d22", kann kleine und große lateinische Buchstaben, Ziffern, den Grundstrich "_" und universelle Zeichennamen enthalten, darf aber nicht mit einer Ziffer beginnen.

Die Bezeichner der Programmiersprache C++  sind identifier  gemäß der folgenden Spezifikation.

identifier 〉 ::=
nondigit 〉 |
identifier 〉 〈nondigit 〉 |
identifier 〉 〈digit 〉.
nondigit 〉 ::=
universal-character-name 〉 |
'
_' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' |
'
k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' |
'
v' | 'w' | 'x' | 'y' | 'z' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' |
'
G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' |
'
R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'.
digit 〉 ::=
'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'.

Übungsfragen Warum ist die Zeichenfolge "8" kein Bezeichner? Warum ist die Zeichenfolge "_" ein Bezeichner? Warum ist die Zeichenfolge "AB" ein Bezeichner?

Die Länge von Bezeichnern ist durch die Sprache nicht begrenzt. Alle verwendeten Zeichen, einschließlich ihrer Groß- oder Kleinschreibung, werden zur Unterscheidung eines Bezeichners von anderen Bezeichnern herangezogen.

Das Nichtterminalsymbol universal-character-name  wird weiter unten behandelt.

Schlüsselwörter

Ein Bezeichner darf kein Schlüsselwort sein.

Die Schlüsselwörter von C++  sind "asm", "auto", "bool", "break", "case", "catch", "char", "class", "const", "const_cast", "continue", "default", "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "operator", "private", "protected", "public", "register", "reinterpret_cast", "return", "short", "signed", "sizeof", "static", "static_cast", "struct", "switch", "template", "this", "throw", "true", "try", "typedef", "typeid", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t" und "while".

Alternativschreibweisen

Alternativschreibweisen (für bestimmte Operatoren und Punktuatoren) dürfen ebenfalls nicht als Bezeichner verwendet werden.

Die Alternativschreibweisen sind "and", "and_eq", "bitand", "bitor", "compl", "not", "not_eq", "or", "or_eq", "xor" und "xor_eq".

Reservierte Bezeichner

Bestimmte Namen sind für die Implementation reserviert, sie dürfen also nicht in einer C++ -Übersetzungseinheit definiert werden. Etwas vereinfacht, handelt es sich um folgende Namen:

Damit sind also beispielsweise die Namen »abc__def«, »_GHI« und »cos« reserviert.

ISO/IEC 14882:2003(E) 17.4.3.1.2 [lib.global.names] Global names
1 Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore (_ _) or begins with an underscore followed by an upper-case letter (2.11) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

Ein Programm darf außerdem keine Namen im Namensraum »::std« definieren.

ISO/IEC 14882:2003(E) 17.4.3.1 [lib.reserved.names] Reserved names
1 It is undefined for a C++ program to add declarations or definitions to namespace std or namespaces within namespace std unless otherwise specified.

Zeichen nach der Norm ISO 10646

Beim ersten Lesen dieses Textes kann die nun beschriebene Möglichkeit der Verwendung des Symbols universal-character-name  ignoriert werden.

Ein universal-character-name  in einem Bezeichner steht für einen Buchstaben nach ISO 10646. Für die Verwendung gelten einige Einschränkungen, die hier nicht wiedergegeben sind. Durch die Möglichkeit der Verwendung solcher Buchstaben wird es ermöglicht, eine größere Menge von Buchstaben in Bezeichnern zu verwenden und diese dann als universal-character-name  im Quellcode darzustellen.

universal-character-name 〉 ::=
'\u' 〈hexquad 〉 |
'\U' 〈hexquad 〉 〈hexquad 〉.
hexquad 〉 ::=
hexadecimaldigit 〉 〈hexadecimaldigit 〉 〈hexadecimaldigit 〉 〈hexadecimaldigit 〉.
hexadecimal-digit 〉 ::=
'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' |
'
a' | 'b' | 'c' | 'd' | 'e' | 'f' |
'
A' | 'B' | 'C' | 'D' | 'E' | 'F'.

C -Standardbezeichner

In C++  sind Namen der aus der Programmiersprache C  übernommene C90 -Standardbibliothek reserviert. Die groß geschriebenen Makronamen sind reserviert, wenn der entsprechende Kopf eingebunden wurde. Klein geschriebene Namen von Objekten und Funktionen mit externer Bindung sind grundsätzlich reserviert. Diese Namen dürfen also nicht umdefiniert werden (jedenfalls nicht innerhalb des globalen Namensraumes).

Die reservierten Bezeichner sind "_IOFBF", "_IOLBF", "_IONBF", "abort", "abs", "acos", "acosf", "acosl", "and", "and_eq", "asctime", "asin", "asinf", "asinl", "assert", "atan", "atan2", "atan2f", "atan2l", "atanf", "atanl", "atexit", "atof", "atoi", "atol", "bitand", "bitor", "bsearch", "btowc", "BUFSIZ", "calloc", "ceil", "ceilf", "ceill", "CHAR_BIT", "CHAR_MAX", "CHAR_MIN", "clearerr", "clock", "clock_t", "CLOCKS_PER_SEC", "compl", "cos", "cosf", "cosh", "coshf", "coshl", "cosl", "ctime", "DBL_DIG", "DBL_EPSILON", "DBL_MANT_DIG", "DBL_MAX", "DBL_MAX_10_EXP", "DBL_MAX_EXP", "DBL_MIN", "DBL_MIN_10_EXP", "DBL_MIN_EXP", "difftime", "div", "div_t", "EDOM", "EILSEQ", "EOF", "ERANGE", "errno", "exit", "EXIT_FAILURE", "EXIT_SUCCESS", "exp", "expf", "expl", "fabs", "fabsf", "fabsl", "fclose", "feof", "ferror", "fflush", "fgetc", "fgetpos", "fgets", "fgetwc", "fgetws", "FILE", "FILENAME_MAX", "floor", "floorf", "floorl", "FLT_DIG", "FLT_EPSILON", "FLT_MANT_DIG", "FLT_MAX", "FLT_MAX_10_EXP", "FLT_MAX_EXP", "FLT_MIN", "FLT_MIN_10_EXP", "FLT_MIN_EXP", "FLT_RADIX", "FLT_ROUNDS", "fmod", "fmodf", "fmodl", "fopen", "FOPEN_MAX", "fpos_t", "fprintf", "fputc", "fputs", "fputwc", "fputws", "fread", "free", "freopen", "frexp", "frexpf", "frexpl", "fscanf", "fseek", "fsetpos", "ftell", "fwide", "fwprintf", "fwrite", "fwscanf", "getc", "getchar", "getenv", "gets", "getwc", "getwchar", "gmtime", "HUGE_VAL", "HUGE_VALF", "HUGE_VALL", "INFINITY", "INT_MAX", "INT_MIN", "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace", "isupper", "iswalnum", "iswalpha", "iswcntrl", "iswctype", "iswdigit", "iswgraph", "iswlower", "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit", "isxdigit", "jmp_buf", "L_tmpnam", "labs", "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "lconv", "LDBL_DIG", "LDBL_EPSILON", "LDBL_MANT_DIG", "LDBL_MAX", "LDBL_MAX_10_EXP", "LDBL_MAX_EXP", "LDBL_MIN", "LDBL_MIN_10_EXP", "LDBL_MIN_EXP", "ldexp", "ldexpf", "ldexpl", "ldiv", "ldiv_t", "localeconv", "localtime", "log", "log10", "log10f", "log10l", "logf", "logl", "LONG_MAX", "LONG_MIN", "longjmp", "malloc", "MB_CUR_MAX", "MB_LEN_MAX", "mblen", "mbrlen", "mbrtowc", "mbsinit", "mbsrtowcs", "mbstate_t", "mbstowcs", "mbtowc", "memchr", "memcmp", "memcpy", "memmove", "memset", "mktime", "modf", "modff", "modfl", "NDEBUG", "not", "not_eq", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "offsetof", "or", "or_eq", "perror", "pow", "powf", "powl", "printf", "ptrdiff_t", "putc", "putchar", "puts", "putwc", "putwchar", "qsort", "raise", "rand", "RAND_MAX", "realloc", "remove", "rename", "rewind", "scanf", "SCHAR_MAX", "SCHAR_MIN", "SEEK_CUR", "SEEK_END", "SEEK_SET", "setbuf", "setjmp", "setlocale", "setvbuf", "SHRT_MAX", "SHRT_MIN", "sig_atomic_t", "SIG_DFL", "SIG_ERR", "SIG_IGN", "SIGABRT", "SIGFPE", "SIGILL", "SIGINT", "signal", "SIGSEGV", "SIGTERM", "sin", "sinf", "sinh", "sinhf", "sinhl", "sinl", "size_t", "size_t", "size_t", "size_t", "size_t", "size_t", "sprintf", "sqrt", "sqrtf", "sqrtl", "srand", "sscanf", "stderr", "stdin", "stdout", "strcat", "strchr", "strcmp", "strcoll", "strcpy", "strcspn", "strerror", "strftime", "strlen", "strncat", "strncmp", "strncpy", "strpbrk", "strrchr", "strspn", "strstr", "strtod", "strtok", "strtol", "strtoul", "strxfrm", "swprintf", "swscanf", "system", "tan", "tanf", "tanh", "tanhf", "tanhl", "tanl", "time", "time_t", "tm", "tm", "TMP_MAX", "tmpfile", "tmpnam", "tolower", "toupper", "towctrans", "towlower", "towupper", "UCHAR_MAX", "UINT_MAX", "ULONG_MAX", "ungetc", "ungetwc", "USHRT_MAX", "va_end", "va_list", "va_start", "vfprintf", "vfwprintf", "vprintf", "vsprintf", "vswprintf", "vwprintf", "WCHAR_MAX", "WCHAR_MIN", "wchar_t", "wchar_t", "wchar_t", "wcrtomb", "wcscat", "wcschr", "wcscmp", "wcscoll", "wcscpy", "wcscspn", "wcsftime", "wcslen", "wcsncat", "wcsncmp", "wcsncpy", "wcspbrk", "wcsrchr", "wcsrtombs", "wcsspn", "wcsstr", "wcstod", "wcstok", "wcstol", "wcstombs", "wcstoul", "wcsxfrm", "wctob", "wctomb", "wctrans", "wctrans_t", "wctype", "wctype_t", "WEOF", "wint_t", "wint_t", "wmemchr", "wmemcmp", "wmemcpy", "wmemmove", "wmemset", "wprintf", "wscanf", "xor" und "xor_eq".

Del.icio.us   |   Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz