Przegląd deklaracji
"Deklaracja" określa interpretację i atrybuty zestawu identyfikatorów. Deklaracja, która powoduje również zarezerwowanie magazynu dla obiektu lub funkcji o nazwie przez identyfikator, jest nazywana "definicją". Deklaracje języka C dla zmiennych, funkcji i typów mają następującą składnię:
Składnia
declaration
:
declaration-specifiers
attribute-seq
Zdecydowaćinit-declarator-list
Zdecydować;
/* attribute-seq
wyrażenie zgody jest specyficzne dla firmy Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
Zdecydować
type-specifier
declaration-specifiers
Zdecydować
type-qualifier
declaration-specifiers
Zdecydować
init-declarator-list
:
init-declarator
init-declarator-list
,
init-declarator
init-declarator
:
declarator
declarator
=
initializer
Uwaga
Ta składnia declaration
nie jest powtarzana w poniższych sekcjach. Składnia w poniższych sekcjach zwykle zaczyna się od nieokreślonego declarator
.
Deklaracje w obiekcie init-declarator-list
zawierają nazwane identyfikatory; init
jest skrótem dla inicjatora. Jest init-declarator-list
to sekwencja deklaratorów rozdzielanych przecinkami, z których każda może zawierać dodatkowe informacje o typie lub inicjator albo oba te elementy. Element declarator
zawiera identyfikatory, jeśli istnieją, są deklarowane. Nieterminalny declaration-specifiers
składa się z sekwencji specyfikatorów typu i klasy magazynu, które wskazują połączenie, czas trwania magazynu i co najmniej część typu jednostek, które deklaratorzy określają. Deklaracje składają się z niektórych kombinacji specyfikatorów klasy magazynu, specyfikatorów typów, kwalifikatorów typów, deklaratorów i inicjatorów.
Deklaracje mogą zawierać co najmniej jeden atrybut opcjonalny wymieniony w attribute-seq
elemecie ; seq
jest skrótem sekwencji. Te atrybuty specyficzne dla firmy Microsoft wykonują kilka funkcji, które zostały szczegółowo omówione w tej książce.
W ogólnej formie deklaracji type-specifier
zmiennej podaje typ danych zmiennej. Może type-specifier
to być związek, tak jak w przypadku modyfikacji typu przez const
lub volatile
. Parametr declarator
nadaje nazwę zmiennej, prawdopodobnie zmodyfikowaną w celu zadeklarowania tablicy lub typu wskaźnika. Na przykład
int const *fp;
deklaruje zmienną o nazwie fp
jako wskaźnik do wartości niemodyfikowalnej (const
). int
W deklaracji można zdefiniować więcej niż jedną zmienną, używając wielu deklaratorów rozdzielonych przecinkami.
Deklaracja musi mieć co najmniej jeden deklarator lub jego specyfikator typu musi zadeklarować tag struktury, tag unii lub składowe wyliczenia. Deklaratory udostępniają wszelkie pozostałe informacje o identyfikatorze. Deklarator to identyfikator, który można zmodyfikować za pomocą nawiasów kwadratowych ([ ]
), gwiazdki (*
) lub nawiasów ( ( )
), aby zadeklarować odpowiednio tablicę, wskaźnik lub typ funkcji. W przypadku deklarowania prostych zmiennych (takich jak znaki, liczby całkowite i elementy zmiennoprzecinkowe) lub struktur i związków prostych zmiennych declarator
jest to tylko identyfikator. Aby uzyskać więcej informacji na temat deklaratorów, zobacz Deklaratory i deklaracje zmiennych.
Wszystkie definicje są niejawnie deklaracjami, ale nie wszystkie deklaracje są definicjami. Na przykład deklaracje zmiennych używające specyfikatora extern
klasy magazynu są "odwołujące się", a nie deklaracje "definiujące". Jeśli zmienna zewnętrzna ma być odwoływać się przed jej zdefiniowaniem lub jeśli jest zdefiniowana w innym pliku źródłowym z tego, w którym jest używana, extern
wymagana jest deklaracja. Magazyn nie jest przydzielany przez deklaracje "odwołujące się" ani nie może być inicjowany w deklaracjach zmiennych.
Klasa magazynu lub typ (lub oba te typy) jest wymagana w deklaracjach zmiennych. Z wyjątkiem programu __declspec
tylko jeden specyfikator klasy magazynu jest dozwolony w deklaracji, a nie wszystkie specyfikatory klasy magazynu są dozwolone w każdym kontekście. Klasa magazynu jest dozwolona __declspec
z innymi specyfikatorami klasy magazynu i jest dozwolona więcej niż raz. Specyfikator klasy magazynu deklaracji wpływa na sposób przechowywania i inicjowania zadeklarowanego elementu oraz tego, które części programu mogą odwoływać się do elementu.
Terminale storage-class-specifier
zdefiniowane w języku C obejmują auto
, , register
extern
, static
, i typedef
. Program Microsoft C zawiera storage-class-specifier
również terminal __declspec
. Wszystkie storage-class-specifier
terminale z wyjątkiem typedef
i __declspec
są omówione w klasach magazynu. Aby uzyskać informacje o typedef
systemie , zobacz typedef
Deklaracje. Aby uzyskać informacje na temat __declspec
programu , zobacz Rozszerzone atrybuty Storage-Class.
Lokalizacja deklaracji w programie źródłowym oraz obecność lub brak innych deklaracji zmiennej są ważnymi czynnikami określającymi okres istnienia zmiennych. Może istnieć wiele ponownych deklaracji, ale tylko jedna definicja. Definicja może jednak pojawić się w więcej niż jednej jednostce tłumaczenia. W przypadku obiektów z wewnętrznym połączeniem ta reguła ma zastosowanie oddzielnie do każdej jednostki tłumaczenia, ponieważ obiekty połączone wewnętrznie są unikatowe dla jednostki tłumaczenia. W przypadku obiektów z połączeniem zewnętrznym ta reguła ma zastosowanie do całego programu. Aby uzyskać więcej informacji na temat widoczności, zobacz Okres istnienia, Zakres, Widoczność i Łączenie.
Specyfikatory typów zawierają pewne informacje o typach danych identyfikatorów. Domyślny specyfikator typu to int
. Aby uzyskać więcej informacji, zobacz Specyfikatory typów. Specyfikatory typów mogą również definiować tagi typów, strukturę i nazwy składników unii oraz stałe wyliczenia. Aby uzyskać więcej informacji, zobacz Deklaracje wyliczenia, Deklaracje struktury i Deklaracjeunii.
Istnieją dwa type-qualifier
terminale: const
i volatile
. Te kwalifikatory określają dodatkowe właściwości typów, które są istotne tylko podczas uzyskiwania dostępu do obiektów tego typu za pośrednictwem wartości l. Aby uzyskać więcej informacji na temat const
elementów i volatile
, zobacz kwalifikatory typów. Aby uzyskać definicję wartości l, zobacz Wyrażenia wartości L i R-Value.
Zobacz też
Podsumowanie składni języka C
Deklaracje i typy
Podsumowanie deklaracji
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla