Sdílet prostřednictvím


extern – specifikátor třídy úložiště

Proměnná deklarovaná specifikátorem extern třídy úložiště je odkazem na proměnnou se stejným názvem definovaným v jiném zdrojovém souboru. Slouží k zviditelnění definice proměnné na externí úrovni. Proměnná deklarovaná jako extern nemá pro sebe přidělené žádné úložiště, jedná se pouze o název.

Příklad

Tento příklad ilustruje deklarace na vnitřní a vnější úrovni:


// Source1.c

int i = 1;

// Source2. c

#include <stdio.h>

// Refers to the i that is defined in Source1.c:
extern int i;

void func(void);

int main()
{
    // Prints 1:
    printf_s("%d\n", i);
    func();
    return;
}

void func(void)
{
    // Address of global i assigned to pointer variable:
    static int *external_i = &i;

    // This definition of i hides the global i in Source.c:
    int i = 16;

    // Prints 16, 1:
    printf_s("%d\n%d\n", i, *external_i);
}

V tomto příkladu je proměnná i definována v souboru Source1.c s počáteční hodnotou 1. Deklarace extern v souboru Source2.c zviditelní "i".

func Ve funkci se adresa globální proměnné i používá k inicializaci static proměnné external_iukazatele . To funguje, protože globální proměnná má static životnost, což znamená, že její adresa se během provádění programu nemění. Dále je proměnná i definována v rámci oboru func jako místní proměnná s počáteční hodnotou 16. Tato definice nemá vliv na hodnotu externí úrovně i, která je skryta použitím svého názvu pro místní proměnnou. Hodnota globální i hodnoty je nyní přístupná pouze prostřednictvím ukazatele external_i.

Viz také

Specifikátory třídy úložiště pro deklarace Internal-Level