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 nazwanej 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-seqopt opt opt init-declarator-list ;

/* attribute-seqopcja jest specyficzna 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 declarator nieterminalnego.

Deklaracje w obiekcie init-declarator-list zawierają nazwane identyfikatory; init jest skrótem dla inicjatora. Jest init-declarator-list to sekwencja deklaratorów rozdzielona przecinkami, z których każda może zawierać dodatkowe informacje o typie lub inicjator albo oba te elementy. Zawiera declarator identyfikatory, jeśli istnieją, zadeklarowane. Nonterminal 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 oznaczają. 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 dla 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, która może zostać zmodyfikowana w celu zadeklarowania tablicy lub typu wskaźnika. 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 zawierać 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 ([ ]), 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 tylko identyfikatorem. 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 to "odwoływanie się", a nie "definiowanie" deklaracji. Jeśli zmienna zewnętrzna ma być odwoływana przed jego 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ływania się", ani nie można zainicjować zmiennych w deklaracjach.

Klasa magazynu lub typ (lub oba te elementy) jest wymagana w deklaracjach zmiennych. Z wyjątkiem parametru __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, w jaki zadeklarowany element jest przechowywany i inicjowany, oraz które części programu mogą odwoływać się do elementu.

Terminale storage-class-specifier zdefiniowane w języku C obejmują auto, , registerextern, statici typedef. 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 na temat typedefprogramu , zobacz typedef Deklaracje. Aby uzyskać informacje na temat __declspecprogramu , zobacz Rozszerzone atrybuty klasy magazynu.

Lokalizacja deklaracji w programie źródłowym i obecność lub brak innych deklaracji zmiennej są ważnymi czynnikami w określaniu okresu istnienia zmiennych. Może istnieć wiele ponownych deklaracji, ale tylko jedna definicja. Jednak definicja może 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ślnym specyfikatorem typu jest 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 Deklaracje unii.

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 i volatile, zobacz Kwalifikatory typów. Aby uzyskać definicję wartości l, zobacz Wyrażenia L-Value i R-Value.

Zobacz też

Podsumowanie dotyczące składni języka C
Deklaracje i typy
Podsumowanie deklaracji