Identyfikatory (C++)

Identyfikator to sekwencja znaków używanych do oznaczania jednego z następujących elementów:

  • Nazwa obiektu lub zmiennej

  • Nazwa klasy, struktury lub unii

  • Wyliczona nazwa typu

  • Składowa klasy, struktury, unii lub wyliczenia

  • Funkcja lub funkcja składowa klasy

  • nazwa definicji typedef

  • Label name

  • Nazwa makra

  • Parametr makra

Następujące znaki są dozwolone jako dowolny znak identyfikatora:

_ 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

Niektóre zakresy uniwersalnych nazw znaków są również dozwolone w identyfikatorze. Nazwa znaku uniwersalnego w identyfikatorze nie może wyznaczyć znaku sterującego lub znaku w podstawowym zestawie znaków źródłowych. Aby uzyskać więcej informacji, zobacz Zestawy znaków. Te zakresy liczb punktów kodu Unicode są dozwolone jako uniwersalne nazwy znaków dla dowolnego znaku w identyfikatorze:

  • 00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6, 00D8-00F6, 00F8-00FF, 0100-02FF, 0370-167F, 1681-180D, 180F-1DBF, 1E00-1FFF, 200B-200D, 202A-202E, 203F-2040, 2054, 2060-206F, 2070-20CF, 2100-218F, 2460-24FF, 2776-2793, 2C00-2DFF, 2E80-2FFF, 3004-3007, 3021-302F, 3031-303F, 3040-D7FF, F900-FD3D, FD40-FDCF, FDF0-FE1F, FE30-FE44, FE47-FFFD, 10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD, 60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, A0000-AFFFD, B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFFD

Następujące znaki są dozwolone jako dowolny znak w identyfikatorze z wyjątkiem pierwszego:

0 1 2 3 4 5 6 7 8 9

Te zakresy numerów punktów kodu Unicode są również dozwolone jako uniwersalne nazwy znaków dla dowolnego znaku w identyfikatorze, z wyjątkiem pierwszego:

  • 0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F

Specyficzne dla firmy Microsoft

Istotne są tylko pierwsze 2048 znaki identyfikatorów języka Microsoft C++. Nazwy typów zdefiniowanych przez użytkownika są "ozdobione" przez kompilator w celu zachowania informacji o typie. Nazwa wynikowa, w tym informacje o typie, nie może być dłuższa niż 2048 znaków. (Zobacz Nazwy ozdobione, aby uzyskać więcej informacji). Czynniki, które mogą mieć wpływ na długość identyfikatora ozdobionego, to:

  • Określa, czy identyfikator określa obiekt typu zdefiniowanego przez użytkownika, czy typ pochodzący z typu zdefiniowanego przez użytkownika.

  • Określa, czy identyfikator określa funkcję, czy typ pochodzący z funkcji.

  • Liczba argumentów funkcji.

Znak $ dolara jest prawidłowym znakiem identyfikatora w kompilatorze Microsoft C++ (MSVC). MSVC umożliwia również używanie rzeczywistych znaków reprezentowanych przez dozwolone zakresy uniwersalnych nazw znaków w identyfikatorach. Aby użyć tych znaków, należy zapisać plik przy użyciu strony kodowej kodowania pliku, która je zawiera. W tym przykładzie pokazano, jak można używać zarówno znaków rozszerzonych, jak i uniwersalnych nazw znaków w kodzie.

// extended_identifier.cpp
// In Visual Studio, use File, Advanced Save Options to set
// the file encoding to Unicode codepage 1200
struct テスト         // Japanese 'test'
{
    void トスト() {}  // Japanese 'toast'
};

int main() {
    テスト \u30D1\u30F3;  // Japanese パン 'bread' in UCN form
    パン.トスト();        // compiler recognizes UCN or literal form
}

Zakres znaków dozwolonych w identyfikatorze jest mniej restrykcyjny podczas kompilowania kodu C++/CLI. Identyfikatory w kodzie skompilowanym przy użyciu /clr powinny być zgodne ze standardową ecMA-335: Common Language Infrastructure (CLI).

END Microsoft Specific

Pierwszy znak identyfikatora musi być znakiem alfabetycznym, wielkimi lub małymi literami albo podkreślenia ( _ ). Ponieważ w identyfikatorach języka C++ jest rozróżniana wielkość liter, fileName różni się ona od FileName.

Identyfikatory nie mogą być dokładnie takie same jak pisownia i wielkość liter jak słowa kluczowe. Identyfikatory zawierające słowa kluczowe są legalne. Na przykład Pint jest identyfikatorem prawnym, mimo że zawiera intelement , który jest słowem kluczowym.

Użycie dwóch sekwencyjnych znaków podkreślenia ( __ ) w identyfikatorze lub pojedynczego wiodącego podkreślenia, po którym następuje litera główna, jest zarezerwowana dla implementacji języka C++ we wszystkich zakresach. Należy unikać używania jednego wiodącego podkreślenia, po którym następuje mała litera nazw z zakresem plików z powodu możliwych konfliktów z bieżącymi lub przyszłymi identyfikatorami zarezerwowanymi.

Zobacz też

Konwencje leksykalne