Boże, co wyście się tacy czepliwi zrobili - wpierw Marooned, teraz Dryo. Skutecznie zniechęcacie przed napisaniem czegokolwiek.
Nie wiem co Marooned napisał, bo tylko wybiórczo przeglądam ostatnio forum, a co do Twojej odpowiedzi, to tylko tak dla zabawy sobie odpowiedziałem. Wiesz, że wcale nie miałem zamiaru krytykować Ciebie. Jak dla mnie jesteś dużym autorytetem w dziedzinie algorytmiki.
Zaczyna do mnie dochodzić, że w tym czasie gdy zrobiłem przerwę od forum tak naprawdę niewielę straciłem.
Ano atmosfera troszkę się psuje... :(
Deklaracja to określenie jakiego typu jest zmienna.
Definicja to zarezerwowanie dla tej zmiennej pamięci.
Wybacz, jeżeli akurat w tym miejscu się z Tobą nie zgodzę, choć wszystko zależy od spojrzenia. Ja wyrosłem na językach pascalowych i tam taki blok:
var
a: Integer;
to jest blok deklaracji zmiennej. Oznajmiam kompilatorowi (deklaruję), że mam zamiar używać zmiennej a typu Integer i on ma zarezerwować odpowiednią ilość miejsca.
Natomiast blok:
type TMojTyp = Integer;
to blok definicji. Definiuję sobie TMojTyp i wszędzie w programie gdzie będzie coś takiego użyte kompilator ma wiedzieć, że chodzi mi o taką to a taką strukturę (przy czym słowo struktura używam tu w potocznym znaczeniu. Nie chodzi mi o struct ;) ).
I żeby już uzupełnić całość, to:
const
Pi = 3.14;
jest blokiem definicji stałych. Definiują sobie stałą Pi i kompilator ma wiedzieć, że pod takim oto znaczniek Pi ma rozumieć konkretna liczbę.
Akurat w tym przypadku nazwa definicja bardziej pasowałaby do #define z C niż const z Pascala (inna implementacja, taka jak const w C)
Jakby co to źródło nazewnictwa to gdzieś w pomocy było (choć i na tych nielicznych wykładach z Pascala też gościu tak mówił, ale jego to za autorytet bym nie uważał).
powiedz więc Dryo, czym jest wiersz taki jak ten:
int tab[10]={0};
Taki wiersz jest deklaracją połączoną z inicjalizacją. W przypadku zmiennych globalnych jest to inicjalizowan już przy ładowaniu programu. Przy lokalnych jest po prostu odpowiednia wartość ustawiana (patrząc w źródła programu BorlandC zauważyłem, że z innego miejsca w programie są kopiowane. Ale to tak dla ciekawości. To co robi jeden kompilator nie muszą inne).
Do definicji w C służy typedef (type definition).
Oczywiście jest deklaracją i definicją jednocześnie.
Jest deklaracją wskaźnika (do komórki pamięci, która jest traktowana jako początek tablicy) i inicjalizacją odpwiednich danych.
Twoja uwaga może mieć na celu tylko jedną rzecz (i robi to skutecznie) uprzykrzanie życia forumowiczom.
To że napisałeś trylion postów nie oznacza że możesz się wpie@#$@ (często niesłusznie) w każdy szczegół mojej wypowiedzi.
Zaczynam się czuć dyskryminowany ze względu na ilość postów. Wiwat coyote i brak licznika postów!
W Polsce mamy wolność słowa i chyba mogę napisać, co o tym sądzę. Nie mówię, że zawsze mam racje. Wręcz przeciwnie. Dosyć często się mylę, ale inni zwracają mi uwagę i się w ten sposób uczę (choć jeżeli jestem pewien swego to jestem uparty).
Aby nie było wątpliwości...
W BorlandC (uparłem się na niego, bo akurat wygodnie mi w nim sprawdzić źródło) przy ustawieniach ANSI C.
Deklaracja taka jak ta:
int q[10] = {1, 2, 3};
jest przekładana na coś takiego:
q:
dw 1, 2, 3,
dw 7 dup(0)
więc to co podałeś jest absolutnie prawdziwe.
w przypadku takiej deklaracji jest chyba mniej efektywne niż zwykła pętelka.
nie rozśmieszaj mnie
I to akurat dla mnie nie wydaje się śmieszne. O ile chodzi o zmienne globalne, to oczywiście jest to znacznie szybsze. Ale jeżeli chodzi o zmienne lokalne, to możnaby tu się sprzeczać. Sporo zależy od samego kompilatora. Wywołanie odzielnej funkcji, która kopiuje dane z innej lokalizacji jest jak na moją znajomość assemblera troszkę wolniejsze niż wrzucenie petli bezpośrednio. Ale mogę się oczywiście mylić.
aaaaaaaaaa Już po jednym tygodniu mam dość tego forum, ratunku!
Rozluźnij się. Wszyscy z utęsknieniem czekaliśmy na Twój triumfalny powrót i każdy chciał jakoś zaznaczyć, że o Tobie pamiętamy, a Ty już tak, jakby nie patrzeć, ostro reagujesz. Chyba naprawdę prowadzisz stresujący tryb życia. Czyżby sesja?
P. S. Taki głupi problem a taka dyskusja. Jak ja to kocham :)