Udostępnij za pośrednictwem


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-specifiersattribute-seqZdecydowaćinit-declarator-listZdecydować;

/* attribute-seqwyrażenie zgody jest specyficzne dla firmy Microsoft */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersZdecydować
type-specifierdeclaration-specifiersZdecydować
type-qualifierdeclaration-specifiersZdecydować

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-seqelemecie ; 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 __declspectylko 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, , registerextern, 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 typedefsystemie , zobacz typedef Deklaracje. Aby uzyskać informacje na temat __declspecprogramu , 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