It;
char fn (int itg, char ch);
to = 5;
char fn (int itg, char ch)
char var = „o”;
if (itg == 1 && ch == 'a')
var = 'z';
return var;
Pierwsza linia jest deklaracją zmienną. Druga linia byłaby podpisem funkcyjnym, gdyby nigdy nie zakończył się półkolisem, a następnie ciało funkcjonalne. Ta druga linia kończąca się półkolisem jest prototypem funkcji. Jest to również deklaracja funkcji. Trzeci wiersz przypisuje wartość do zmiennej liczby całkowitych: jest to inicjalizacja zmienna, ale nadal może być postrzegana jako definicja zmiennej. Reszta kodu jest definicją funkcji. Zaczyna się od podpisu funkcji, a następnie ciała funkcyjnego.
W C ++ istnieje niuans, gdy dotyczy deklaracji i definicji. Poniższe stwierdzenie jest deklaracją zmienną:
int it = 5;
Kompletna deklaracja zmiennej, w której zmienna jest wprowadzana, a następnie przypisana wartość, jest nadal deklaracją zmienną. Zatem deklaracja zmiennej może po prostu wprowadzić samą zmienną lub wprowadzenie z definicją.
Poniższy kod (skopiowany z góry) jest deklaracją funkcji:
char fn (int itg, char ch)
char var = „o”;
if (itg == 1 && ch == 'a')
var = 'z';
return var;
Pełna deklaracja funkcji, taka, w której jego podpis wprowadza funkcję, a następnie nadaje się ciało funkcji, jest nadal deklaracją funkcji. Tak więc deklaracja funkcji może być po prostu sam prototypem funkcji lub może być podpisem funkcji wraz z ciałem funkcji.
Tak więc deklaracja może być z definicją lub bez. Definicja jest jak podłoża deklaracji. Ze zmienną przypisanie wartości po raz pierwszy jest w rzeczywistości inicjalizację i nie jest tak naprawdę zdefiniowane. Gdy zmienna jest zadeklarowana po raz pierwszy bez inicjalizacji, jej lokalizacja w pamięci jest już dostarczona, ale jest pusta. Wartość w lokalizacji jest inicjalizacja, która kończy definicję.
Tradycyjnie prosta aplikacja C ++ ma trzy pliki. Ma główny plik, który można nazwać pierwszym plik. Ma drugi plik i plik nagłówka. Korzystanie z specyfikatora zewnętrznego może zmniejszyć liczbę plików do dwóch (z trzech). W tym artykule wyjaśniono użycie specyfikatora zewnętrznego ze zmiennymi i funkcjami, aby uniknąć pliku nagłówka. Uwaga: W słowniku C ++ takie dwa pliki nazywane są jednostkami tłumaczeniowymi.
Treść artykułu
Plik nagłówka bez zewnętrznego
Tradycyjnie prosta aplikacja C ++ ma trzy pliki: plik główny z funkcją Main (. Plik nagłówka powinien mieć deklaracje zmiennych i funkcji bez ich definicji. Definicje deklaracji nagłówka powinny znajdować się w drugim pliku. Na górze pierwszego pliku musi być,
#include ”głowa.hh "
Gdzie głowa.HH to nazwa pliku nagłówka i znajduje się w katalogu użytkowników. Dyrektywa obejmująca półkolis. W tej sytuacji deklaracje zmienne bez definicji i prototypy funkcji bez definicji funkcji w pliku nagłówka, nie powinny być poprzedzone specyfikatorem zewnętrznym. A aplikacja powinna działać.
Ilustracja
Powyższa zmienna i funkcja są używane do ilustracji tutaj.
Wpisz następujący kod w edytorze tekstu i zapisz go w katalogu użytkowników, z nazwą, głowa.HH:
int it = 5;
char fn (int itg, char ch);
W nagłówku są tylko dwa stwierdzenia. Następnie wpisz następujące w dokumencie bez tytułu edytora tekstu i zapisz w katalogu użytkowników, z nazwą, drugi.CPP:
char fn (int itg, char ch)
char var = „o”;
if (itg == 1 && ch == 'a')
var = 'z';
return var;
A następnie wpisz następujący kod w innym bez tytułu dokumenta.CPP:
#include ”głowa.hh "
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Cout << it << endl;
Cout << fn(1, 'a') << endl;
powrót 0;
Skompiluj aplikację z następującym poleceniem terminalu:
G ++ Najpierw.CPP drugi.cpp -o kompletne.exe
Wykonaj aplikację z,
./kompletny.exe
Wyjście to:
5
z
Niestety, plik nagłówka nie pozwala na prostą deklarację zmiennej (e.G., to) bez inicjalizacji. Jednak problem ten można rozwiązać, jak pokazano poniżej.
EXTER bez pliku nagłówka
Plik nagłówka można wyeliminować, jeśli specyfikator zewnętrzny jest odpowiednio używany. W tej sytuacji pojawi się deklaracja zmiennej i funkcji, każda bez definicji w pierwszym pliku (głównym). Każdy będzie poprzedzony zewnętrzną.
Ilustracja
Wpisz następujący kod w edytorze tekstu i zapisz go w katalogu użytkowników, z nazwą, najpierw.CPP:
#włączać
za pomocą przestrzeni nazw Std;
extern int to;
extern char fn (intg, char ch);
int main ()
Cout << it << endl;
Cout << fn(1, 'a') << endl;
powrót 0;
Następnie wpisz następujące w dokumencie bez tytułu edytora tekstu i zapisz w katalogu użytkowników z nazwą, drugi.CPP:
int it = 5;
char fn (int itg, char ch)
char var = „o”;
if (itg == 1 && ch == 'a')
var = 'z';
return var;
Definicja zmiennej i funkcji miała miejsce w drugim pliku. W pierwszym pliku tutaj zostały zadeklarowane bez definicji. W tej nowej aplikacji nie uwzględniono żadnego nagłówka. W grę wchodzą tylko dwa pliki. Zauważ, że zmienna została całkowicie zadeklarowana w drugim pliku, ale bez słowa extra. Nawet funkcja również została ogłoszona całkowicie bez słowa extra. Jednak słowo „zewnętrzne” musi poprzedzać częściowe deklaracje w pierwszym pliku.
Skompiluj aplikację z następującym poleceniem terminalu:
G ++ Najpierw.CPP drugi.cpp -o kompletne.exe
Uruchom aplikację z,
./kompletny.exe
Wyjście to:
5
z
Tak samo jak poprzednio, ale bez żadnego pliku nagłówka.
Zatem deklaracje specyfikatora zewnętrznego między dwoma plikami. Jeden plik powinien wykonać deklarację bez definicji i z zewnątrz. Drugi plik powinien wykonać definicję, która byłaby pełną deklaracją, ale bez zewnętrznego.
Plik nagłówka i zewnętrzny
Powyższa aplikacja miała problem, że zmienna musiała zostać całkowicie zadeklarowana w pliku nagłówka. Aby mieć deklarację zmiennej w pliku nagłówka bez definicji, zmienna musi być poprzedzona zewnętrzną. Więc jeśli jest,
extern int to;
W pliku nagłówka będzie
int it = 5;
w drugim pliku i nadal będzie
#include ”głowa.hh "
Na górze pierwszego pliku (plik główny).
Stały i zewnętrzny
W normalnych okolicznościach należy zainicjować stałą. Na przykład,
const char ch = „e”;
jest dozwolony i
const char ch;
Nie jest dozwolone.
Jednak w przypadku specyfikatora zewnętrznego stałą można zadeklarować bez inicjalizacji w pierwszym i drugim pliku. Tak więc, jeśli w pierwszym pliku jest
extern const char ch;
W drugim pliku będzie
char ch = „e”;
Bez const w drugim pliku. CH w obu plikach jest tym samym jednostką.
Wymień pierwszy.plik CPP z następującą zawartością i zapisz:
#włączać
za pomocą przestrzeni nazw Std;
extern const char ch;
int main ()
Cout << ch << endl;
powrót 0;
Wymień drugi.plik CPP z następującą zawartością i zapisz:
char ch = „e”;
Skompiluj aplikację z następującym poleceniem terminalu:
G ++ Najpierw.CPP drugi.cpp -o kompletne.exe
Uruchom aplikację z,
./kompletny.exe
Wyjście powinno być, e.
zewnętrzny i statyczny
Specyfikatory klas przechowywania w C ++ są statyczne, Thread_Local, Extern, Modable. Nie więcej niż jeden z nich można użyć w danej deklaracji. Jednak w kilku przypadkach Thread_Local i statyczne mogą pojawić się przed deklaracją encji lub Thread_Local i Extern mogą pojawić się przed deklaracją bytu. Tak więc zewnętrzne i statyczne nigdy nie mogą być obecne jako specyfikatory do deklaracji.
Wniosek
EXTRED CEKIFORT łączy dwie deklaracje tego samego encji, które znajdują się w dwóch różnych plikach. Deklaracja posiadająca specyfikator zewnętrzny nie powinien być inicjowany ani zdefiniowany. Deklaracja w drugim pliku, który nie ma specyfikatora zewnętrznego, powinna zostać zainicjowana lub zdefiniowana. Ten schemat dotyczy zmiennych i funkcji. Eliminuje potrzebę pliku nagłówka dla zmiennych i funkcji zainteresowania. Pozwala na zadeklarowanie stałej bez inicjalizacji w jednym pliku i w drugim pliku. Jeśli programista chce pliku nagłówka, aby mieć zmienną w pliku nagłówka, bez inicjalizacji, programista musi używać EXTER dla zmiennej w pliku nagłówka.