Zdefiniowac a zadeklarować zmienną

0

To pytanie dręczy mnie już bardzo długo i nie wiem jaka jest różnica.

bo np
int a;

a=1;

czyli zadeklarowałem zmienną i zainicjowałem?
czy zdefiniowałem i zainicjowałem?

0

int a; zarówno definiuje jak i deklaruje zmienną. Natomiast inicjujesz ją tutaj a=1;, zakładając że wcześniej nie nadałeś jej jakiejś wartości. Generalnie jednak inicjacja jest polecana już przy definicji/deklaracji czyli int a=1;

2

Deklaracja nadaje jakiejś nazwie znaczenie. Gdy podczas deklarowania będziemy mówić już o jakiejś konkretnej zmiennej, będzie ona również jej definicją. W przypadku zmiennych i C/C++ deklaracja bez definicji to ta bez inicjalizacji (bo to by się wiązało z jej definicją) oraz ze specyfikatorem extern. Inicjalizacja to nadanie zmiennej jej początkowej wartości. Niekoniecznie musi być ona wykonania przez ciebie.
extern int a; to sama deklaracja
int a; to deklaracja z definicją
a = 1; to inicjalizacja.
int a = 1; to deklaracja z definicją i inicjalizacja

Deklaracja to powiedzenie, że a będzie zmienną typu int. Definicja, że zmienna faktycznie znajduje się tutaj. Inicjalizacja, że jej początkowa wartość wyniesie 1.

Znaczenie odpowiednich terminów może różnić się pomiędzy językami i technologiami.

2

Wydaje mi się że lepiej to widać w kontekście na przykład statycznych pól klas albo klas jako takich.

class A;

To deklaracja klasy. Mówi tylko o tym że A jest klasą, więc oznacza jakiś typ, ale nie wiadomo jeszcze co to za typ.

class A{
};

To jest już definicja klasy, bo mówi nam o tym jak ta klasa jest zbudowana, ile zajmie pamięci itd.

Rozdzielność deklaracji od definicji jest też obecna przy statycznych polach klasy - wielu ludzi ma z ty problem bo o tym nie wiedzą i dziwią się że takie coś:

class A{
  static int x;
};

im nie chce działać. A nie chce, bo gdzieś trzeba tą zmienną zdefiniować, tzn tak jakby "nadać tej zmiennej pamięć" i w jakimś pliku źródlowym musi być

int A::x;

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