deklaracja i definicja zmiennej

deklaracja i definicja zmiennej
A9
  • Rejestracja: dni
  • Ostatnio: dni
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ę?

Kopiuj
 
int x; //deklaracja
x = 10; //inicjalizacja
int y = 5; // definicja = deklaracja + inicjalizacja
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
6

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

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
4

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

Kopiuj
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

Kopiuj
void f();    // deklaracja
void g() {}      // definicja
koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0

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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0

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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0

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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.