deklaracja i definicja zmiennej

0

Może mi ktoś powiedzieć dlaczego na stronie 7 jest napisane:
"Definiuj zmienną, zapisując jej typ, a następnie jej nazwę."
Przecież żeby zdefiniować zmienną trzeba ją jeszcze zinicjalizować.
Powinno być co najwyżej "ZADEKLARUJ zmienną, zapisując jej typ, a następnie jej nazwę."

http://www.zsnacpolsk.bho.pl/kolko_informatyczne/podstawy%20j%C4%99zyka%20c++.pdf
U mnie w książce też tak jest napisane.

Dobrze myślę?

 
int x; //deklaracja
x = 10; //inicjalizacja
int y = 5; // definicja = deklaracja + inicjalizacja
6

Możesz zdefiniować zmienną nie inicjalizując jej. W Twoim przykładzie int x jest definicją w większości kontekstów.

4

Deklaracja dostarcza jedynie nazwę i typ. Po deklaracji nie masz jeszcze poprawnej zmiennej, której możesz użyć.

extern int x;    // deklaracja
int y;             // definicja

Czyli jeśli nie masz zmiennej x zdefiniowanej w jakimś innym pliku, to próba użycia tej zmiennej skończy się błędem podczas linkowania.

Dla funkcji nie potrzebujesz extern, żeby powiedzieć że deklarujesz

void f();    // deklaracja
void g() {}      // definicja
0

Nawiasem mówiąc, int x definiuje, bo inicjalizuje zmienną -- tylko zwykle nie wiesz jaką wartością... :)

3

No nie bardzo, int x w zależności od scope'u może oznaczać albo zero-initialization (static, globalne i składowe klas z zero-inicjalizacją w konstruktorze), albo default-initialization (zmienne lokalne, składowe klas bez inicjalizacji w konstruktorze), albo value-initialization (składowe klas z inicjalizacją wartością w konstruktorze)

W przypadku default-initialize dla typów skalarnych standard mówi:

no initialization is performed.

0

No i w przypadku default-initialization nie wiesz jaką wartością... :)

0

Dokładnie. A ponieważ standard mówi "no initialization is performed" nazywanie takiej zmiennej zainicjalizowaną to co najmniej nadużycie

0

Tyle, że jakąś wartość tak, czy owak ma -- trzeba o tym pamiętać.

2

Z perspektywy języka nie ma żadnej wartości, a jej odczyt to UB.

1 użytkowników online, w tym zalogowanych: 0, gości: 1