[21:02] ------------------------------------------------------------czesc 6 --------------------------------------------- [21:02] * Blizzard juz jest wsio ok;) [21:02] lol nico [21:02] to ja ide :s [21:02] *** Gynvael sets mode: +m [21:02] ok ;> [21:02] *** andi^ [~andi-16@bwa171.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [21:02] witam wszystkich na nowym kanale ;> [21:02] stary oposcilismy z uwagi na niepewna sytuacje z botnetem ktory tam stal (i mnie kopal ;p) [21:02] Gynvael: witamy panie profesorze ;) [21:02] ;p [21:02] ok [21:02] wiec [21:03] dzisiaj bedzie o jakis tam strukturach i uniach [21:03] i moze napomkne o paru formach funkcji main [21:03] standardowe zasady [21:03] jak mowie jest +m [21:03] * X405 podnosi reke [21:03] jak sie zamykam i wy mowicie jest -m [21:03] cio tam X405 ? [21:04] chcialem sie usprawiedliwic, nie bylo mnie na wczesniejszych lekcjach :P [21:04] i sie odrazu zwalnia bo mam troche roboty ;) [21:04] xa.... [21:04] *** phoenix__ [~phoenix@ced247.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [21:04] cu ;) [21:04] cu ;> [21:04] ok [21:04] *** SlimFast has quit IRC ("Leaving") [21:04] wiec lecimy [21:05] poprzednio bylo o czyms takim jak zmienne [21:05] zmienna miala typ i nazwe [21:05] i moglismy jej nadac wartosc ktora pozniej uzywalismy do pewnych celow [21:05] przykladowo [21:06] zalozmy ze chcemy opisac za pomoca paru zmiennych [21:06] *** salv4tion [~salvation@80.48.232.136] has joined #c0d3.ur.dreams [21:06] samochody ktore maja nasi znajomy [21:06] wyobrazmy sobie jakis wirtualnych znajomych [21:06] marcina i tomka [21:06] i zalozmy ze maja jakies autka [21:07] zalozmy ze w "opisie" ma byc marka, rocznik i przebieg [21:07] mozemy wiec zrobic tak: [21:07] *** m4shed [n3tdes@bsd.miki.eu.org] has joined #c0d3.ur.dreams [21:07] char *marcina_auto_marka = "Sirenault"; [21:08] int marcina_auto_rocznik = 1978; [21:08] *** pixello [~user@dsa247.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [21:08] int marcina_auto_przebieg = 123456; [21:08] oraz tomka [21:08] char *tomka_auto_marka = "Ford Maluch"; [21:08] int tomka_auto_rocznik = 1984; [21:08] int tomka_auto_przebieg = 231425; [21:08] *** Gynvael sets mode: +nt [21:09] coz [21:09] mozemy tak zrobic [21:09] po 3 zmienne na osobe [21:09] ale jest to troche niewygodne [21:09] mozna to zrobic latwiej, za pomoca struktur [21:09] struktura typem odpowiadajacym grupie typow zmiennych z nazwami [21:10] struktura zawiera "pola", kazde ma typ i nazwe [21:10] definiuje sie ja za pomoca keyworda "struct" [21:10] przykladowo [21:10] struct autko [21:10] { [21:10] const char *marka; [21:10] int rocznik; [21:10] int przebieg; [21:10] }; [21:11] to jest definicja typu zmiennej "struct autko" (nalezy zauwazyc ze slowo "struct" nalezy do nazwy... to jest nierozdzielne i nierozlaczne) [21:11] *** G0blin [~Goblin@dnl18.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [21:11] struktura struct autko ma 3 pola [21:11] pole const char *marka; [21:11] pole int rocznik [21:11] i pole int przebieg [21:11] jak widac pola deklaruje sie IDENTYCZNIE jak zmienne [21:12] ok [21:12] teraz tak [21:12] "struct autko" to jest TYP ZMIENNEJ [21:12] tak samo jak "int", "float" czy "char*" [21:12] zmienne o tym typie tworzy sie analogicznie: [21:12] struct autko marcina, tomka; [21:12] *** j00ru`crk [j00ru@host-81-190-204-245.gorzow.mm.pl] has joined #c0d3.ur.dreams [21:13] mamy dwie zmienne: marcina i tomka o typie "struct autko" [21:13] jak nadac konkretnemu polu konkretna wartosc ? [21:13] np. [21:13] marcina.marka = "Sirenault"; [21:13] *** G0blin is now known as G0blin`ma`pytan [21:13] http://gynvael.lunarii.org/temp/gk6_1.c [21:14] w tym przykladzie jest pokazane zadeklarowanie powyzszej struktury [21:14] *** j00ru`crk has left #c0d3.ur.dreams [21:14] oraz jej uzycie [21:14] rzuccie na to okiem [21:14] teraz pytanka, a za chwile troche poprawimy ten program i wprowadze "typedef" oraz -> [21:14] *** Gynvael sets mode: -m [21:14] pytania ? [21:14] ja nie mam [21:15] czy to jest to samo co klasa ? [21:15] ja mam ^^ [21:15] *** G0blin`ma`pytan is now known as G0blin [21:15] ja mam ;] [21:15] a ne [21:15] mam jednak ;p [21:15] phoenix__: nie, nie jest, roznice wyjasnie za chwile [21:15] G0blin: mow mow [21:15] kk [21:15] salv4tion: ? [21:15] andi^: ? [21:15] o typie "struct autko" a nie o typie "autko"? [21:15] co znaczy const? [21:15] g0blin first ;] [21:15] i czemu tam tablicy nie ma [21:15] wlasnie [21:16] G0blin: tak, w jezyku C typ nazywa sie "struct autko", kompilator nie zna czegos takiego jak "autko", w jezyku C++ by juz znal ;> [21:16] pole const char *marka; [21:16] i dlaczego przesyla sie jako wskaznik? [21:16] czemu tak jest [21:16] salv4tion: const to ze zmieniac nie mozna [21:16] o to mnie chodzilo, thx :] [21:16] a co to kurwa jest? [21:16] a wskaznik? [21:16] ;> [21:16] salv4tion: oznacza ze cos jest stale, niezmienne, const char *marka oznacza ze to jest "wskaznik na znak ktorego nei mozemy zmienic (ale mozemy odczytac)" [21:16] filQ: ? [21:16] no [21:16] co to jest [21:16] #c0d3.ur.dreams [21:16] ? [21:16] :s [21:16] Gynvael: a czemu tam tablicy nie ma [21:16] salv4tion: "asdf" <=- to ma tym const char[], wiec const char* jest najodpowiedniejsze do tego [21:17] salv4tion: byles na #5? ;> tam to tlumaczylem [21:17] ;> [21:17] gynu dwa pytanka krotkie. [21:17] Gynvael: chyba nie [21:17] :) [21:17] filQ: kurs jezyka c [21:17] Gynvael: skoro nie mozemy zmienic wartosci wskazywanej const char* marka to chyba sie da, to co wskazuje? [21:17] :P [21:17] adam__i: no i co to jest za czanel [21:17] bo nic nie kapuje [21:17] andi^: na #5 bylo, ogoolnie chodzi o to ze "asdf" jest WSKAZNIKIEM NA STALY NAPIS ;> [21:17] jakeis lekcje ?_? [21:17] Mulander: mow [21:17] gynu mozna dodawac elementy do struct dynamicznie poza polem deklaracji struct nazwa { }; [21:17] ? [21:18] filQ: trudno sie domyslic? [21:18] sorki, ja tu jestem 1 raz... ;] [21:18] *** Necrium [healscream@sido.us] has joined #c0d3.ur.dreams [21:18] filQ: to ejst czanel an ktrym Gynvael daje lekcje jezyja c [21:18] G0blin: nie mozemy zmieniac wartosci TEGO NA CO WSKAZNIK WSKAZUJE, ale mozemy zmieniac wartosc samego wskaznika [21:18] Mulander: sa na to sposoby, natomiast automatycznych rzeczy nie ma [21:18] andi^: spoko ;> [21:18] const char* marka; <=nie zmienia sie wartosc wskazywana, informacje, na ktore wskazuje, czy i jedno i drugie? :P [21:18] kolejna sprawa w struct nieda sie definiowac funkcji prawda ? [21:19] ok :] [21:19] G0blin: "marka = adres" jest ok, ale "*marka = wartosc" to blad [21:19] adam__i: a znacie jakies z kamasutra [21:19] ? [21:19] juz przeczytalem, odpowiedziales wczesniej, sry :P [21:19] marka = dres [21:19] ;] [21:19] Mulander: funkcji nie, co najwyzej wskaznik na funkcje [21:19] filQ: nie odzywaj sie jak nie masz pytan zwiazanych z kursem [21:19] w gruncie rzeczy oto mi chodzilo ;) [21:19] Mulander: jesli chodzi ci o zasymulowanie klasy za pomoca structa, to jest trudno ;>>>> [21:20] salv4tion: przepraszam jaksniepanie [21:20] Mulander: da sie, ale jak to zwykle bywa, rzadko kiedy dziala ;>> [21:20] blah [21:20] Gynu a powiedz mi czy warto ? [21:20] *** filQ has left #c0d3.ur.dreams [21:20] Mulander: nie ;> [21:20] wrr [21:20] *** LiquID67742 [~malyrozpi@bje114.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [21:20] Gynvael: a podobno klasy od structow sie roznia tym, ze klasa jest domyslnie prywatna a struct publiczny [21:20] gyn pytanie [21:20] G0blin: o tym za chwile, ale roznic jest wiecej ;> [21:20] phoenix__: tak ? [21:20] w koncu ktos mi o tym powie ^^ [21:21] czemu jak jest strct autko marcina tomka ; jest struct ? [21:21] a kalsach tak nei ma [21:21] nie mozna tego za pomoca typdef uniknac? o czym pewno powiesz za chwile :P [21:21] *** Gynvael sets mode: +o salv4tion [21:21] ej moze potem jak Gyn zrobi znami klasy to sie bedziemy o to pytac [21:21] phoenix__: o tym za chwile ;> [21:21] *** pixello has quit IRC ("") [21:21] jakie sa roznice a nie wiem czy to ma teraz sens [21:21] Gynvael: aha [21:21] Mulander: nie mozna w C uniknac ;> [21:21] jak chcecie [21:21] :) [21:21] m4shed: eheheh klasy jak w C++ sie bedziemy bawic ;> [21:21] dobra no further questions please continue ;) [21:22] ok [21:22] ;] [21:22] jeszcze jakies pytania ? [21:22] *** d0b0c0p [^d0b0c0p@cce13.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [21:22] to jedziemy dalej [21:22] ;> [21:22] *** Gynvael sets mode: +m [21:22] d0b0c0p: hi ;> [21:22] ok [21:22] wiec [21:22] po kolei [21:22] zaczne od pytania obiektowcow [21:22] czyli "czym sie rozni struct od klasy" [21:22] *** G0blin is now known as G0blin`docenion [21:23] glowna roznica jest to, ze klasa ma METODY, to sa funkcje z convention callem __thiscall [21:23] czyli, niejawnie jako parametr dostaja POINTER NA SWOJ OBIEKT [21:23] natoamist w struct'cie nei mozna definiowac funkcji [21:23] a pointer na funkcje nie dostanie adresu zmiennej z ktorej zostal wywolany [21:23] po za tym z mniejszych roznic [21:24] to faktycznie, struct jest caly publiczny [21:24] a class defaultowo prywatny [21:24] w strukcie nie mozna okreslic co jest protected/private/public [21:24] roznic jest wiecej [21:24] natomiast te sa glowne [21:25] w sturkturze NIE MA FUNKCJI [21:25] a w klasie SA (metody) [21:25] -=212026=- jeszcze jedno mi pytanie umknelo :P jak wyglada roznica w pamieci miedzy struktura a klasa? To jest jak to wyglada od strony zuzycia cpu/pamieci oraz jak to jest przez system alokowane? [21:25] ok [21:25] o pamieci w strukturach jeszcze za chwile bede mowic [21:25] teraz powiem tylko tak [21:25] *** G0blin`docenion is now known as G0b`protected0x [21:25] jesli chodzi o klase, tam sa dwie specialne metody/funkcje [21:25] *** G0b`protected0x is now known as G`protected0x3f [21:25] czyli konstruktor i destructor [21:26] przy tworzeniu obiektu (new) jest alokowana pamiec na obiekt, po czym jest wywolywany konstruktor z (niejawnym) parametrem - pointer na zaalokowana pamiec [21:26] zakladajac ze classa nie ma zadnych metod etc [21:26] *** LiquID67742 has quit IRC ("") [21:26] wyglada analogicznie do structa [21:27] to pod wzgledem zapisu w pamieci nie rozni sie niczym od structa [21:27] klasa to wogole dwie rzeczy [21:27] *** phoenix__ is now known as phoenix__`pyt [21:27] 1) obiekty maja zaalokowana pamiec na pola (nie metody) [21:27] 2) jest globalna lista metod dla danej klasy (Afair to sie VTABLE zwie) [21:27] strukty maja ofc tylko 1) [21:28] ok [21:28] tyle offtopic [21:28] klasy to zupelnie inna bajka [21:28] jako ze w C nie ma klas [21:28] ;> [21:28] ale sa strukty [21:28] phoenix__`pyt: rzuc pytanko na priva [21:28] a ja dalej nawijam o structach [21:28] padlo pytanie na temat [21:28] "czemu struct autko a nie samo autko jest nazwa typu ?" [21:28] coz [21:28] tak wymyslili tworcy C [21:28] ma to swoje dobre i zle strony [21:29] *** G`protected0x3f is now known as G0blin`lol [21:29] niewatpliwa zla strona jest to ze trzeba wiecej pisac [21:29] "struct " to wkoncu 7 znakow ;> [21:29] (w C++ tego struct nie trzeba pisac, ale nie mowimy o C++ :>) [21:29] *** G0blin`lol is now known as na_sec-m [21:30] *** nietopesz has quit IRC ("Leaving") [21:30] (powtorze 1m, w structach NIE MOZE BYC ZDEFINIOWANYCH FUNKCJI) [21:30] (jest to syntax error ;>) [21:30] ok [21:30] wiec.. [21:30] wracajac do tematu [21:30] stworzono cos takiego jak typedef [21:30] typedef typ nazwa; [21:30] wezmy na przyklad: [21:30] int a; <=- stworzenie ZMIENNEJ o nazwie "a" i typie "int" [21:31] a teraz wstawmy przed to slowo "typedef" [21:31] typedef int a; <=- stworzenie TYPU o nazwie "a" ktory jest IDENTYCZNY TYPOWI "int" [21:31] czyli [21:31] mozna po tej linii pisac: [21:31] a b,c,d; [21:31] i jest to ROWNOZNACZNE [21:31] int b,c,d; [21:32] ew mozna to zrobic za pomoca dyrektywy preprocesora, ale o tym nie powiem bo tego nie nalezy w tym wypadku stosowac ;pppp [21:32] *** phoenix__`pyt is now known as znam_z_cpp [21:32] *** znam_z_cpp is now known as phoenix__ [21:32] *** andi^ is now known as nie_zmieniajcie [21:32] *** na_sec-m is now known as G0blin [21:32] *** nie_zmieniajcie is now known as tych_nickow [21:33] hmm [21:33] ok [21:33] *** tych_nickow is now known as andi^ [21:33] teraz tak [21:33] wiec [21:33] mamy to nasze nieszczesne "struct autko" [21:33] jesli zrobimy: [21:33] struct autko atuko; <=- to stworzymy zmienna "autko" o typie "struct autko" [21:33] a jak zastosujemy typdef [21:33] typedef struct autko autko; [21:34] to juz wiecej tego brzydkiego "struct" przy DEKLARACJACH zmiennych pisac nie bedzie trzeba [21:34] *** d0b0c0p is now known as masz_racje [21:34] *** G0blin is now known as wiecejpisania [21:34] *** wiecejpisania is now known as nizpoprostu [21:34] ok [21:34] dostalem pytanie na priv [21:34] *** nizpoprostu is now known as autko [21:35] o co mi chodzi z definicja funkcji w strukcie [21:35] *** d0b0c0p_ [~user@aag2.internetdsl.tpnet.pl] has joined #c0d3.ur.dreams [21:35] na przykladzie: [21:35] NIE MOZNA ZROBIC TAK: [21:35] struct { [21:35] *** autko is now known as autoo [21:35] void ala(void) { [21:35] puts("xxx"); [21:35] } [21:35] }; [21:35] *** autoo is now known as G0blin [21:35] czyli NIE MOZNA UTWORZYC FUNKCJI (zadnej) wewnatrz STRUCTA [21:35] dla przykladu wrzucilem tam DEFINICJE FUNKCJI "ala" [21:35] jest to ofc syntax error [21:36] *** G0blin is now known as pytanie [21:36] dobra [21:36] ludzie wracamy do starego systemu ;> [21:36] pytanka jak -m ;> [21:36] bo zamiast pisac tu pisze na privach [21:36] hehe [21:37] *** pytanie is now known as G0blin`0x3f [21:38] ok [21:38] dalej [21:38] teraz tak [21:38] mamy typedefa [21:38] i mozemy pisac: [21:38] autko marcina, tomka; [21:38] juz wygodniej [21:38] teraz rzucmy okiem na wypisywanie tam [21:38] mamy dwa printf [21:38] a teraz pomyslmy gdybysmy mieli 10 autek [21:38] to by trzeba 10 takich paru-linijkowych printf'ow [21:38] masakra [21:38] lepiej zrobmy funkcje [21:39] funkcja dostanie WSKAZNIK NA STRUCTA (structa nie dostanie, za duzo "wazy", ale o tym za chwile) [21:39] i bedzie wypisywac pola ze wskazanego structa [21:39] http://gynvael.lunarii.org/temp/gk6_2.c [21:39] mowie o funkcji "wypisz" [21:39] prosze zauwazyc ze nie ma tam "x.marka" [21:40] tylko jest jakies "x->marka" [21:40] x jest "autko *x" (argumentem funkcji wypisz) [21:40] *** SlimFast [~123@gate.olnet.com.pl] has joined #c0d3.ur.dreams [21:40] czemu -> (to strzalka ;>) zamiast . ? [21:40] zauwazmy ze jest to wskaznik (x) [21:40] czyli nie mozemy napisac [21:40] x.pole [21:40] bo x nie jest zmienna typu struct, tylko adresem [21:40] wiec trzeba by zrobic [21:40] (*x).pole [21:41] ( *x.pole to to samo co *(x.pole) ) [21:41] mozna by zrobic, owszem, (*x).pole [21:41] ale ROWNOZNACZNE jest x->pole [21:41] to jest dokladnie to samo [21:41] a ile mniej pisania i jakze czytelniejsze [21:41] *** d0b0c0p_ is now known as d0b0c0p [21:41] wypisz("marcina", &marcina); [21:41] jak mozna zobaczyc podajemy tam pointer do zmiennej [21:41] &marcina [21:41] ok [21:41] teraz jeszcze mecza mnie te "po 3" linie na nadawanie wartosci [21:42] *** bubel [bubel@127-0-0-1.com] has joined #c0d3.ur.dreams [21:42] marcina.marka = "Sirenault"; [21:42] marcina.rocznik = 1978; [21:42] marcina.przebieg = 123456; [21:42] mozna to zrobic szybciej [21:42] na #5 mowilem o inicjowaniu tablic [21:42] czyli [21:42] int a[] = {1,2,3}; [21:42] tutaj mozna zrobic analogicznie [21:42] czyli [21:42] http://gynvael.lunarii.org/temp/gk6_3.c [21:42] autko marcina = { "Sirenault", 1978, 123456 }; [21:42] autko tomka = { "Ford Maluch", 1984, 231425 }; [21:43] WAZNE jest zeby ZACHOWAC KOLEJNOSC POL, tak zeby czasem nie nadac "Sirenault" do pola "rocznik" ;> [21:43] czyli main zmniejszyl sie do 5 linii [21:44] *** masz_racje has quit IRC ("leaving") [21:44] ok [21:44] za chwile bedzie o sizeof() struktur (a to niezla zabawa) [21:44] a teraz pytania [21:44] *** Gynvael sets mode: -m [21:44] Gynvael: czy w objective c sa klasy? [21:44] d0b0c0p: nie znam objective c ;< [21:44] no to ja ponawiam pytanie z prv ^^ [21:45] G0blin`0x3f: przeklej je ty jesli mozesz [21:45] ;> [21:45] ej no! [21:45] moge [21:45] co za debil napaskudzil na #gynkurs? [21:45] mam takie pytanko: mowiles jak sie porozumiewa z samym soba class, prawdopodobnie to, ze nie mozna w structa funkcji pakowac wynika z odmiennosci w tym punkcie [21:45] wiec jak sie struct ze soba samym dogaduje? [21:45] sic [21:45] bubel: pewnie ja, bo nicki zmienialem ^^ [21:46] G0blin`0x3f: ban! [21:46] hehe [21:46] *** G0blin`0x3f is now known as G0blin [21:46] bubel: blizzard [21:46] G0blin`0x3f: zauwaz ze struct nie musi znac swojego adresu (w przeciwienstwie do obiektow) [21:46] Blizzard: ban! [21:46] G0blin: wystarczy ze "rzecz korzystajaca ze structa" zna jego adres ;> [21:46] mam pytanie niedotyczace tego "kursu" [21:46] o ukladzie structu w pamieci zaraz bede mowic ;> [21:46] i juz loga nie mam --; [21:46] tak btw mozna prosic o (k)opa? :D [21:46] czy zrobicie cos podobnego do tego tylko o php? najlepiej z sql ;] [21:46] Gynvael: hmmm [21:47] no wlasnie chcialem o uklad w pamieci zapytac ^^ [21:47] andi^: hmmm na mnie nie patrz ;> u mnie z sql nie najlepiej ;> [21:47] ty niewiesz ile gynu za godzine bierze ^^ [21:47] andi^: by trzeba rzucic na uw-team pomysl i meczyc wiare [21:47] :D [21:47] ;ppppp [21:47] n/p [21:48] 3 mangi, 40 winow na sc i duuze piwko :P [21:48] ok [21:48] Gynvael: moze bys zrobil cos o pisaniu w bashu ? perlu ? [21:48] a cos na temat ? ;> [21:48] Ja propnuje ejzcze asma,perla,whitesapce itp [21:48] Necrium: zobaczy sie ;> [21:48] ej [21:48] koniec ot [21:48] perl ^^ [21:48] :D [21:48] bubel: eh juz wyjasnione jest wszystko nie czepiaj sie [21:48] Gynvael: w tej funkcji jakbys dal x.marka zamiast x->marka to by wypisal adres? [21:48] to jest kurs c [21:48] Necrium: raczej o asmie potem pojdzie ;> i moze C++ ;> [21:48] chcialem dobrze [21:48] wszytko mzoe od razu ?: P [21:48] wyszlo zle [21:48] d0b0c0p: to by byl error ze nie ma takiego pola ;ppppp [21:48] :-) [21:48] ;oo [21:48] a czemu? [21:48] Blizzard: spoko ;> nie przejmooj sie ;> [21:48] przeciez to wskaznik powinien wypisac adrs [21:48] * adres [21:49] qrde i mam dylemat... ;] [21:49] d0b0c0p: ale wskaznikiem jest "x" a nie x.marka ;> [21:49] a moze i nie :P [21:49] Gynvael: jak juz mnie d0ubl3_j zbanowal na *uw [21:49] Gynvael: to po co wprowadzili ->? :| [21:49] przeciez mozna by rowniez uzyc . :| [21:49] znalazlem harrego 6 czesc po polsku na necie... a tu sie zaczyna ciekawie robic... i nie wiem gdzie uczestniczyc :> [21:49] d0b0c0p: gyn mowil [21:49] Blizzard: eh, odbanowalem cie ;> [21:49] powstawala dwuznacznosc [21:50] d0b0c0p: zeby nie robic (*x).marka [21:50] andi^: na kursiw [21:50] tylko dlatego? [21:50] tak samo jak kiedys bylo: [21:50] Gynvael: moze bys ksiazke napisal, zarobilbys sporo [21:50] int a; [21:50] a=+1 [21:50] Necrium: nie mam czasu na to ;> a na ircu i tak siedze [21:50] tak btw ja wole robic (*x) niz x-> [21:50] i to bylo zle :P [21:50] d0b0c0p: hehehe no ja nie wiem ;> mnie by to wkurzsalo ;> ale jak kto woli, technicznie sie nie rozni za duzo ;p [21:51] ;] [21:51] moze sie przyzwyczaje [21:51] tyle pytan? ;> [21:51] d0b0c0p: ja nie moglem sie przyzwyczaic, to posuwam w c/cpp :P [21:51] G0blin: niby do czego? :P [21:51] -> [21:52] w cpp nie ma takiego :P [21:52] jest ;P [21:52] w symfonii czytalem [21:52] musze loga przeczytac bo nei nadazam ;] [21:52] ale nie trzeba uzywac :P [21:52] d0b0c0p: sprawdzilem wlasnie, kompilowane jest IDENTYCZNIE, wiec to bez roznicy [21:52] Gynvael: thx ;] [21:52] ok [21:52] jeszcze jakies pytania ? [21:52] chyba nie [21:53] ja mam [21:53] o czym mowicie? [21:53] Gynvael: na co to odp? [21:53] mow [21:53] * d0b0c0p szkoda, ze teraz jest oboz koncentracyjny :P [21:53] bubel: structy [21:53] d0b0c0p: sprawdzilem wlasnie, kompilowane jest IDENTYCZNIE, wiec to bez roznicy <= na co to odp? [21:53] aha no to czekam na loga ;> [21:53] ja musze spadac [21:53] G0blin: na (*x).pole i x->pole [21:53] bede jutro [21:53] cya [21:53] pa andi^ [21:53] papa [21:53] bye, bye ;] [21:53] baj [21:53] ok [21:53] mozna tak: (*x).pole ? [21:53] jeszcze jakies pytania ? [21:53] juz nie :] [21:53] G0blin: tak ;> [21:54] no przecierz powiedzial [21:54] to pyt retoryczne [21:54] :] [21:54] ;> [21:54] ok [21:54] go [21:54] *** Gynvael sets mode: +m [21:54] ok [21:54] dalej [21:54] a teraz [21:54] *** andi^ has quit IRC ("") [21:54] jak jest struct ulozony w pamieci [21:54] pola sa KOLEJNO w pamieci [21:54] czyli [21:54] struct asdf { int a,b,c; } [21:55] struct asdf x; [21:55] adres x.b to jest adres x.a + sizeof(x.a) [21:55] czyli [21:55] w pamieci to wyglada tak: [21:55] [a (4 bajty)] [b (4 bajty)] [c (4 bajty)] [21:55] *** G0blin is now known as pytanie [21:55] nie zawsze tak jest [21:55] ale o tym za chwile [21:55] *** d0b0c0p is now known as zamknij_jape [21:55] *** zamknij_jape is now known as d0b0c0p [21:56] teraz taki strik [21:56] *trik [21:56] dla ludzi ktorzy pamietaja z #4 i #5 pointery [21:56] dla powyzszego structa [21:56] mozna zrobic: [21:56] int *y = (int*) &x; [21:56] i wtedy [21:56] y[0] == x.a [21:56] y[1] == x.b [21:56] y[2] == x.c [21:56] to sa TE SAME ZMIENNE wtedy ;> [21:57] ok [21:57] teraz tak [21:57] ad pytanie g0blina ktore dostalem jednak na privie [21:57] sizeof(x) wynosi.... [21:57] 12 [21:57] struct NIE MA ZADNYCH DODATKOW [21:57] to sa POLA [21:57] *** pytanie is now known as G0blin [21:57] czyli [21:57] wielkosc structa to suma wielkosci pol... [21:57] ehehe [21:57] a tak naprawde to nie ;> [21:58] niestety tutaj wchodzi OPTYMALIZACJA --; [21:58] ktora powoduje takzwane "wyrownanie adresow do 4" [21:58] w przypadku kiedy sasiednie pola maja rozne wielkosci [21:58] sizeof(x) wynosi ZAWSZE 12 [21:58] ale popatrzmy na inny przypadek [21:59] struct x { [21:59] int a; [21:59] char b; [21:59] int c; [21:59] }; [21:59] struct x y; [21:59] *** G0blin is now known as wie_ [21:59] sizeof(y) dla kazdego normalnego czlowieka wynosic powinien 9 (sizeof(x.a) + sizeof(x.b) + sizeof(x.c)) [21:59] niestety tak nie jest [22:00] *** wie_ is now known as G0blinXP [22:00] e [22:00] sizeof(y) dla kazdego normalnego czlowieka wynosic powinien 9 (sizeof(y.a) + sizeof(y.b) + sizeof(y.c)) [22:00] jako ze pole "y.b" ma sizeof(1) [22:00] a pole "y.c" ma sizeof(4) [22:00] (tzn rowny 1 i rowny 4) [22:01] to kompilator stwierdza ze trzeba wyrownac adres "y.c" zeby mial koncowke podzielna przez 4 [22:01] i robi 3 BAJTY NIEUZYWANE W STRUCTIE [22:01] czyli w pamieci to wyglada tak: [22:01] *** SlimFast is now known as SlimSleep [22:01] [.a (4 bajty)] [.b (1 bajt)] [ 3 bajty nieuzywane ] [.c (4 bajty)] [22:02] podobno wtedy wszystko szybciej dziala ;> [22:02] (sprawdze to zaraz btw ;>) [22:02] coz [22:02] tak jest [22:02] i trzeba o tym pamietac [22:02] ok [22:02] teraz moga byc pytanka [22:02] a za chwile powiem JAK ZMUSIC KOMPILATOR ZEBY NIE TWORZYL CUDOW I sizeof(y) == 9 ;> [22:02] jak widac wyzej btw, sizeof(y) == 12 [22:02] *** Gynvael sets mode: -m [22:02] ok [22:02] pytania [22:03] czy to samo bedzie jesli char bedzie ostani [22:03] ? [22:03] to rowniez wystepuje przy wiekszj ilosci elementow w strucie tak? [22:03] cz to roznicy nei ma i czy jakby byly wszystki chary ? [22:03] to by bylo 12 ? [22:04] ? [22:04] phoenix__: tak, bedzie sie dziac to samo [22:04] wielkosc rowniez jest zaokraglana do 4 [22:04] pytanie z priva: [22:04] -=215837=- struct asdf{ [22:04] -=215843=- char a; [22:04] -=215846=- char s; [22:04] -=215847=- } [22:04] -=215856=- to jest 8 czy 4? [22:04] -=215919=- sizeof(asdf)==8||4 ? [22:04] *** m4shed has quit IRC (Connection reset by peer) [22:05] jako ze OBA POLA MAJA TAKA SAMA WIELKOSC [22:05] to sizeof wynosi 2 [22:05] eee a nie 8 ? [22:05] nie, nie 8 [22:05] ;> [22:05] to jest wlasnie dziwne [22:05] ale [22:05] pola sasiadujace musza byc roznej wielkosci [22:05] zeby nastepowalo zaokraglenie adresow [22:05] przykladowo [22:06] jesli "s" zamiast "char" bylo "short" [22:06] to wtedy sizeof(struct asdf) bylo by 4 [22:06] a jesli by tam byly nie 2 tylko 3 chary, to bylo by nadal 3 [22:06] a teraz ciekawa rzeczy [22:06] czyli tak zwana optymalizacja structow [22:06] wezmy na przyklad structa: [22:07] struct asdf { char a; int b; char c; int d; }; [22:07] sizeof( struct asdf ) wynosi 16 [22:07] fajna rzecz ;] [22:07] jako ze pola sasiadujace roznia sie wielkoscia [22:07] a gdyby przeniesc "char c" za "char a" [22:07] czyli [22:07] struct asdf { char a; char c; int b; int d; }; [22:07] wtedy sizeof() byl by rowny 12 [22:07] teraz tak [22:07] NIE TRZEBA ZNAC ZASAD JAKIE TU PANUJA NA PAMIEC [22:07] ale.. [22:08] TRZEBA WIEDZIEC ZE COS TAKIEGO JEST [22:08] to sie glownie przydaje przy odczycie z plikow binarnych jakis naglowkow [22:08] ok [22:08] cos jeszcze ? [22:08] czy moge +m ?;> [22:08] o tych nagloowka [22:08] *** shogunx0 has quit IRC (Connection reset by peer) [22:08] o naglowkach w plikach binarnych bedzie duzo pozniej ;> [22:08] ale chodzi mi o odczyt [22:09] bubel: heheh mi tez ;;> [22:09] bubel: ogolnie chodzi o to [22:09] chodzi mi sie przydaje :p [22:09] o to ;> [22:09] ze do plikow wszystko jest zapisywane "spakowane" [22:09] czyli na przyklad [22:09] struct asdf { char a; int b; char c; int d; }; [22:09] to by bylo zapisane po kolei [22:09] a nie w calosci jako struct [22:09] a qmam [22:09] czyli sizeof() tego w pliku byl by rowny 10 [22:09] a nie 16 [22:09] teraz juz wiem o co lazi :p [22:09] wiec jesli ty bys chcial odczytac caly struct naraz [22:09] to bys sie przejechal [22:09] ;> [22:10] ok [22:10] jeszcze jakies pytania ? [22:10] Gynvael: jak zmusic kompialtor "do normalnego" strukturowania? :P [22:10] d0b0c0p: o tym za chwile [22:10] ;> [22:10] ok [22:10] w8 [22:10] ile jeszcze bedzie trwalp? [22:10] phoenix__: hmm 1h mniej wiecej [22:10] *** _G0blin [~Goblin@doh154.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [22:11] *** salv4tion has quit IRC (Connection reset by peer) [22:11] 0_o [22:11] to ja ide [22:11] phoenix__: jeszcze unie ;> [22:11] <_G0blin> gyn: mialem megalaga...... [22:11] loga przeczytam [22:11] unia europejska... ;] [22:11] re _G0blin ;> [22:11] <_G0blin> mozesz mi odpowiedziec na ostatnie pytanie? [22:11] k [22:11] *** _G0blin is now known as G0blin [22:12] *** adam_i has quit IRC (Connection reset by peer) [22:12] ide sie umyc [22:12] ooo bot padl [22:12] ips [22:12] oops logi poszly :| [22:12] logow nei bedzie [22:12] beda [22:12] hmmm :| [22:12] ;/ [22:12] a to juz koniec? [22:12] *** b3x has quit IRC (Ping timeout) [22:12] bubel: jakby co to robisz logi? ;>> [22:12] ok [22:12] d0b0c0p: nie [22:12] bubel: osz ty ;) [22:13] ok [22:13] jedziemy ? [22:13] ja robie logi jak cos [22:13] ;p [22:13] yes my lord [22:13] *** Gynvael sets mode: +m [22:13] ok [22:13] wiec [22:13] dalej [22:13] teraz: metody "unormalniania" sizeof() structa [22:13] metody sa 3 [22:13] *** G0blinXP has quit IRC (Ping timeout) [22:13] kazda prosta ;> [22:14] 1) #pragma pack(1) i #pragma pack(0) [22:14] *** Necrium has quit IRC ("Lost terminal") [22:14] przed deklaracja structa dajemy #pragma pack(1) [22:14] po #pragma pack(0) [22:14] i.. [22:14] tyle ;> [22:14] np [22:15] #pragma pack(0) [22:15] struct asdf{ char a; int b; char c; int d; }; [22:15] #pragma pack(1) [22:15] sprawdzamy sizeof, i wynosi 10 a nie 16 ;> [22:16] eh [22:16] ofc zle [22:16] #pragma pack(1) [22:16] struct asdf{ char a; int b; char c; int d; }; [22:16] #pragma pack(0) [22:16] pack(1) to ofc wlaczenie packowania [22:16] a pack(0) to wylaczenie [22:17] btw powiem ze #pragma nie jest dyrektywa preprocesora ;> [22:17] tylko rozkazem dla kompilatora ;> ale niewazna ;> [22:17] ok [22:17] teraz druga metoda [22:18] *** b3x [buterux@pstryk.net] has joined #c0d3.ur.dreams [22:18] *** adam_i [~adam@80.48.232.136] has joined #c0d3.ur.dreams [22:18] 2) po } dajemy __attribute__((__packed__)) [22:18] np [22:18] struct asdf { char a; int b; char c; int d; } __attribute__((__packed__)); [22:19] i tyle [22:19] nic wiecej [22:19] sizeof() = 10 [22:19] trzeci sposob [22:19] to w sumie rozwiniecie 1) [22:20] 3) przed #pragma pack(push,1) a po #pragma pack(pop) [22:20] czym sie rozni 3) od 1) ? [22:20] zalozmy ze sobie ustawilismy juz #pragma pack(1) [22:20] po czym cos tam robimy [22:21] i liczymy potem ze nadal to #pragma pack(1) dziala [22:21] ale zalozmy ze przez przypadek dodalismy jakiegos structa 1m [22:21] np [22:21] #pragma pack(1) [22:21] ... [22:21] #pragma pack(0) [22:21] czyli tego packowanie juz nie dziala [22:21] natomiast [22:21] jesli bysmy tam wrzucili 3) [22:22] to to by wlaczylo pakowanie, po czym PRZYWROCILO STARE USTAWIENIE PACKOWANIA ;> [22:22] czyli nadal by obowiazywal ten sam stan co przed pack(push,1) [22:22] niom [22:22] tyle [22:22] *** Gynvael sets mode: -m [22:22] pytania ? [22:22] Co to est 1m [22:22] adam__i: to jest slang ;p "one more" [22:22] ;p [22:23] ja mialem jakies pytanie [22:23] a juz wiem [22:23] *** salv4tion [~salvation@80.48.232.136] has joined #c0d3.ur.dreams [22:23] Niem tego w moim slownku zargonu ircoweg [22:23] __attribute__ [22:23] sa jakies inne atrybuty? [22:23] adam__i: ;> [22:23] Gynvael: slangu uczy, gyn moze osoba lekcjie do tego ? [22:23] G0blin: http://www.ohse.de/uwe/articles/gcc-attributes.html [22:23] phoenix__: ehehehe [22:23] *osobna [22:23] ok [22:23] cos na temat ?;> [22:23] Mysle, ze k to wymysl gyna a jest w slownku [22:24] thx [22:24] gyn co tam jeszcze ze slangu powiesz zeby uprzedzic na przyszlosc? [22:26] co taka cisza? [22:26] jedziemy dalej? [22:26] Gynvael: [22:26] mam prosbe: [22:26] nie ustawiaj +m :P [22:26] i tak nikt sie nie bedzie odzywal [22:26] prawda? [22:27] hehe :P [22:27] Gynvael: zniknol [22:27] ehm.. herbatke sobie poszedl zrobic [22:27] Gynvael szuka jakichs haxi0rskich linkow [22:27] Gynvael wrzuca przykad na serwa gk6_4.c [22:27] *** SlimSleep has quit IRC (Operation timed out) [22:28] re [22:28] ;p [22:28] ok [22:28] jedziemy [22:28] sorx za przerwe [22:28] *** Gynvael sets mode: +m [22:28] ok [22:28] teraz jeszcze powiem ze mozna deklarowac struct w strukcie [22:29] a teraz [22:29] chwila przerwy od tych struktur [22:29] i 3 slowa na temat main [22:29] funkcja glowna - main - objawia sie w 3ch postaciach [22:29] 1) int main(void) - nic ciekawego [22:30] 2) int main(int argc, char **argv) - argc to ilosc argumentow, a argv to tablica tych argumentow [22:30] przykladowo [22:30] jesli odpalimy program tak: [22:30] ./a.out b c [22:30] to argv == 3 [22:30] argv[0] == "./a.out" [22:30] argv[1] == "b" [22:30] argv[2] == "c" [22:30] ;> [22:30] dodatkowo [22:30] argv[3] == NULL [22:30] (tablica jest zakonczona NULLem) [22:31] 3) int main(int argc, char **argv, char **envp) [22:31] natomiast envp jest zakonczona "NULL" tablica zmiennych srodowiskowych [22:31] np PATH etc [22:31] *** Szajba has quit IRC (Connection reset by peer) [22:31] http://gynvael.lunarii.org/temp/main1.c [22:31] http://gynvael.lunarii.org/temp/main2.c [22:31] http://gynvael.lunarii.org/temp/main3.c [22:31] http://gynvael.lunarii.org/temp/main4.c [22:31] tam sa przyklady uzycia tego [22:31] 22:27:26 LiTeStEp D:\tmp\kurs>main4 [22:31] program otrzymal 1 argumentow: [22:31] [0]: D:\TMP\KURS\MAIN4.EXE [22:31] program dostal zmienne srodowiskowe: [22:31] [0]: TMP=C:\WIN98\TEMP [22:31] [1]: TEMP=C:\WIN98\TEMP [22:31] [2]: winbootdir=C:\WIN98 [22:32] tego typu output main4.c daje ;> [22:32] *** Gynvael sets mode: -m [22:32] pytania ? [22:32] shit [22:32] jakies mam [22:32] tylko zapomnialem jakie :P [22:33] a juz wiem [22:33] jak to jest z flagami w programach [22:33] Gynvael: tak btw.. lepiej jest uzywac *argv[] czy **argv? [22:33] mozesz uruchomic program zer zmienna liczba flag... [22:33] d0b0c0p: bez roznicy [22:33] tam sa domyslne argumenty ustawione? [22:33] G0blin: podaj przyklad plz [22:33] pytanie [22:33] na przyklad: [22:33] phoenix__: tak ? [22:34] czemu sa 2 * prazy argv? [22:34] gcc -o blabla [22:34] gcc ma tyle flag [22:34] a nie zawsze wpisujesz ze ta jest a ta nie [22:34] jak to sie robi? [22:34] phoenix__: to inna metoda zapisyu *argv[] w tym wypadku, a *argv[] to TABLICA WSKAZNIKOW NA NAPISY ;> [22:35] phoenix__: czyli **argv to WSKAZNIK NA PIERWSZA LITERE PIERWSZEGO ELEMENTU TABLICY NAPISOW ;ppp [22:35] a którego sie czesciej uzywa ? [22:35] a co jezeli zamiast argumentu zrobimy pipe ? [22:35] phoenix__: obu [22:35] aha [22:35] co to pipe? [22:35] obsluguje sie to jakos specjalnie ? [22:35] Mulander: pipe nie ma niec do argumentow ;> to polecenie do systemu zeby stdout/in przekierowal [22:35] Mulander: program nawet o tym nei wie ;> [22:35] :) [22:35] G0blin: w petli [22:35] * Mulander notuje kolejna roznice miedzy c a perl :P [22:36] w8 wrzuce program [22:36] ale jak w petli [22:36] a juz wiem [22:36] wiem, wiem, wiem [22:36] przypomnialo mi sie jak mowiles, zebym nie myslal o outpucie jak o czyms ulotnym, ale jak o pliku :] [22:37] G0blin: akurat tutaj to nie ma nic do rzeczy hihi [22:37] http://gynvael.lunarii.org/temp/params.c.html [22:37] http://gynvael.lunarii.org/temp/params.c [22:37] zajrzyj tam [22:37] ;> [22:37] tam masz przyklad [22:37] kk [22:37] ktory komus kiedys pisalem [22:37] ulotne cgwile ulotne jak fotka ;P [22:38] ok [22:38] jeszcze jakies pytania ? [22:38] gyn: thx again [22:38] tak\ [22:38] jak jest z tym boolean ? [22:39] phoenix__: boola jako zmiennej sie w c nie stosuje :P [22:39] phoenix__: w C nie ma, tam w przykladzie jest #define boolean char [22:39] G0blin: nie do konca :P [22:39] i w #define x y to ktore sie na ktroe zamienia ? [22:39] w c99 instiej taki typ _Bool ;] [22:39] wiem, ze nie do konca, ale ogolnie :] [22:39] czyli to jest PRAWIE ZE typedef char boolean; ;> [22:39] d0b0c0p: ale mowa o C ;> [22:39] ale fakt [22:40] aha [22:40] w c99 istnieje ;> [22:40] a ja wiem czemu nie ma boola, co zajmuje 1 bit :D :P [22:40] (w c) [22:40] Gynvael: :) [22:40] phoenix__: wszystkie wystapienia x na y [22:40] G0blin: bo trudno by sie to adresowalo [22:40] ;> [22:40] ok [22:40] moge o uniach nawijac ? [22:40] o wlasnie :] [22:40] ^^ [22:41] w8 [22:41] zrobmy to z kanalem [22:41] to Cie odciaze [22:41] o uniach nieco wiem [22:41] wogle o wszystkim nieco wiem :] [22:41] G0blin: to moze od nastepnego razu heheheheh [22:41] kk [22:41] ok [22:41] nastepny topic? [22:41] nie wiem [22:41] ;> [22:41] ok [22:41] :P [22:41] *** Gynvael sets mode: +m [22:41] wiec [22:41] teraz unie [22:42] coz [22:42] zaczne od tego [22:42] ze unie (union) deklaruje sie identycznie jak structa [22:42] union nazwa { [22:42] int a; [22:42] char b; [22:42] float c; [22:42] }; [22:42] union nazwa zmienna; [22:42] zmienna.a = 12 [22:42] etc [22:42] czym sie rozni union od structa ? [22:42] tym ze w strukcie, kazde pole to osobna zmienna [22:43] a w unii, KAZDE POLE TO DOKLADNEI TEN SAM FRAGMENT PAMIECI [22:43] co to znaczy [22:43] wezmy np [22:43] union asdf { [22:43] int a,b,c; [22:43] }; [22:43] union asdf x; [22:43] x.a = 12; [22:44] od teraz x.b wynosi TEZ 12, bo MA DOKLADNIE TAKI SAM ADRES jak x.a, WIEC TO TA SAMA ZMIENNA, TYLKO O INNEJ NAZWIE [22:44] *** phoenix__ is now known as pyt`ale`params` [22:44] od teraz x.c wynosi TEZ 12, bo MA DOKLADNIE TAKI SAM ADRES jak x.a, WIEC TO TA SAMA ZMIENNA, TYLKO O INNEJ NAZWIE [22:44] ;> [22:44] sizeof(union asdf) == 4 [22:44] *** pyt`ale`params` is now known as phoenix__ [22:44] adres x.a == adres x.b == adres x.c [22:44] ok [22:44] glupie nie ? [22:45] sizeof(unii) == sizeof(najwieksze pole w unii) [22:45] ok [22:45] po co to jest ? [22:45] na poczatku stosuje sie BARDZO rzadko [22:45] ale potem troche czesciej [22:45] dla tych co znaja asma, nastepujacy przyklad powinien im rozjasnic sytuacje [22:45] union eax { [22:46] int eax; [22:46] short ax; [22:46] struct { char al, ah; } a; [22:46] } [22:46] union eax rejestr; [22:46] rejestr.eax = 0x12345678; [22:46] to rejestr.ax = 0x5678 [22:46] rejestr.a.al == 0x78 [22:46] rejestr.a.ah == 0x56 [22:47] przykladowo [22:47] gdybysmy teraz zmienili wartosc al [22:47] rejestr.a.al = 0xff [22:47] to rejestr.eax == 0x123456ff [22:48] ok [22:48] teraz co do innych zastosowan [22:48] hmm [22:48] co tu duzo mowic [22:49] na poczatku sie nie przydaje [22:49] a pozniej stosuje sie do duzych modulow [22:49] przykladowo [22:49] zalozmy ze mamy osoby [22:49] kazda z nich ma jakas rzecz [22:49] jedna ksiazke [22:49] druga auto [22:49] a trzecia kubek ;> [22:49] ksiazke opisujemy za pomoca nazwy ksiazki i autora ksiazki [22:50] auto za pomoca marki, przebiegu i rocznika [22:50] a kubek za pomoca zawartosci i wielkosci (w ml) [22:50] mozemy wiec stworzyc nastepujacac unie: [22:50] union rzecz { [22:50] int typ; [22:50] struct { const char *tytul, *autor } ksiazka; [22:51] struct { const char *marka; int rocznik; int przbieg; } autko; [22:51] !@$#%@$#%@ [22:51] zawsze zapomne o czyms [22:52] union rzecz { int typ; struct { int typ; const char *tytul, *autor; } ksiazka; struct { int typ; const char *marka; int rocznik, przebieg; } autko; struct { int typ; const char *zawartosc; int wielkosc; } kubek; [22:52] ... [22:52] union rzecz { [22:52] int typ; [22:52] struct { int typ; const char *tytul, *autor; } ksiazka; [22:53] struct { int typ; const char *marka; int rocznik, przebieg; } autko; [22:53] struct { int typ; const char *zawartosc; int wielkosc; } kubek; [22:53] }; [22:53] ok [22:53] teraz co jest co [22:53] int typ; we wszystkich structach bedzie zajmowac ten sam kawalek pamieci [22:53] reszta danych rowniez [22:53] sizeof(union rzecz) wynosi 16 bajtow [22:53] umoowimy sie ze typ = 0 oznacza ze osoba nic nie ma [22:53] typ = 1 ze ma ksiazke [22:54] typ = 2 ze ma autko [22:54] a typ = 3 ze ma kubek [22:54] czyli [22:54] w programie mozemy zrobic [22:54] union rzecz marcina; [22:54] ... [22:54] switch(marcina.typ) [22:54] { [22:54] case 0: puts("nic nie ma"); break; [22:55] case 1: printf("ma ksiazke %s autora %s\n", marcina.ksiazka.tytul, marcina.ksiazka.autor); break; [22:55] case 2: printf("ma samochod marki %s (%i, %ikm)\n", marcina.autko.marka, marcina.autko.rocznik, marcina.autko.przebieg); break; [22:55] *** phoenix__ is now known as idzie [22:55] etc...... [22:55] ok [22:55] *** idzie is now known as cya [22:55] *** Gynvael sets mode: -m [22:55] pytania ? [22:56] cya all [22:56] *** cya is now known as phoenix__ [22:56] jeszcze 1 [22:56] tak [22:56] union rzecz { [22:56] int typ; [22:56] struct { int typ; const char *tytul, *autor; } ksiazka; [22:56] struct { int typ; const char *marka; int rocznik, przebieg; } autko; [22:56] struct { int typ; const char *zawartosc; int wielkosc; } kubek; [22:56] }; [22:56] po co int typ? [22:57] czy moglbys napisac program np taki co jak nie dostanie parametru to wyswietla cos tam a jak dostanie -w to wyswietli cos tam a jak -o to cos tam ... [22:57] ?? [22:57] skoro wartosc moze miec tylko jedna z tych zmiennych [22:57] o parametry mi chodzi [22:57] glownie o to domyslne [22:57] czyli albo wypelnimy int typ albo ktoregos structa [22:57] najlepiej jakby bylo przy tym jak najwiecej komentrarzy [22:58] wlascie co z tym co G0blin mowi ? [22:58] :] [22:58] Gynvael: alive ? [22:58] re [22:58] G0blin: zeby wiedziec jaki rodzaj przedmiotu ma kazda osoba [22:58] G0blin: zauwaz ze gdyby w struct np ksiazka, nie dac pierwszego int typ [22:59] G0blin: to int typ; z "glownego" by miala dokladnie ten sam adres i zajmowala dokladnie ten sam fragment pamieci co "ksiazka.tytul" ;> [22:59] aaaaaaaa [22:59] ok, juz sam wykombinowalem jak to dziala [22:59] Czy cos jkezcze dzisja bedze [22:59] sprytne :] [22:59] G0blin: a tak "rezerwujesz" miejsce na ten typ (dlatego we wszystkich structach musi byc jako pierwszy) [22:59] adam__i: zadanie domowe; > [23:00] w programie to bedzie dzialalo tak: [23:00] Gynvael: a jak z moja prosba ? [23:00] pytasz o typ, wpisujesz [23:00] phoenix__: jutro mnie mecz na ircu ok ? [23:00] phoenix__: wieczorem najlepiej [23:00] kk [23:00] zaraz ja mialem gdzies taki skrypt z argumentami ;) [23:00] przepisujesz do okreslonego strukta i w zaleznosci co to za typ pytasz o dalsze rzeczy? [23:00] wzorcowy [23:00] zapisze se gdzies bo mam skleroze ;P [23:00] ide cya [23:00] kiedy naastepny kurs? [23:01] phoenix__ czekaj [23:01] zaraz ci dam tego progza co chciales [23:01] na co ? [23:01] *** unkind [~unkind@clq229.neoplus.adsl.tpnet.pl] has joined #c0d3.ur.dreams [23:01] ok [23:01] teraz tak [23:01] to potem mi dasz ja ide spac [23:01] siemka [23:01] *** Gynvael sets mode: +m [23:01] zadanie domowe ;> [23:01] te poprzednie na dzisiaj [23:01] slac na gynvael@vexillium.org [23:01] *** phoenix__ has quit IRC ("cyaaaaa") [23:02] a dzisiaj: poczytac o BIT FIELD (pole bitowe) w strukturach ;> i napisac program wykorzystujacy je [23:02] *** Gynvael sets mode: -m [23:02] ok [23:02] jeszcze jakies pytania ? [23:02] nastepny wyklad o 21 w srode [23:02] ja wiem jak jest pole bitowe :]