Ha jól dereng, éppen minap kérdeztél rá, hogy mire jó ez a
#define VALAMI
definiált érték nélkül. Például erre. Ha a DEBUG szerepelt egy ilyen #define sorral, az #ifdef utáni lesz a while ciklus feltétele, egyébként ez #else utáni.
do {
Res = waitpid(-1,NULL,WNOHANG);
sleep(1);
} while(Res <= 0);
return 0;
}
Na ezzel van problemam.
Mivelhogy ennyi az egesz bot lenyegeben.
Tehat ami itt nem vilagos:
#endif utan miert van 2 {} kozott egy resz?
Meg ezt a waitpid-es reszt se ertem.
utanaolvastam a neten, de bevallom oszinten az nekem magas volt.
Szal nem fogtam fel(reszben azert mert angol volt).
En ebbol az egezsbol ennyit sutottem ki:
Kapcsolodik egy szerverre. Es ennyi.
Meg vegulis ez nem is egy ciklus.
Tehat ami magyarazatra szorul:
Egyszer kapcsolodik-e, vagy ha leszakadt, akkor ujra kapcsolodik?
Mert nem latom a ciklust.
Meg a waitpis resz nem vilagos meg...;)
Kosz.
Kelleni nem, kell, csak illik.
A main az oprencer felé tér vissza értékkel, ami int kell legyen. Általnosan elfogadott, hogy 0-val tér vissza sikeres befejeződés esetén, nem 0-val, ha valamilyen speciális okból szakadt meg a progi futása (ezért szokott pl sikertelen malloc lekezelésekor egy exit(1) a befelyeztetés módja, mert az 1 != 0). Ezt az értéket DOS alatt felhasználhatod pl az autoexec.bat -ban mint errorlevel, vagy valami hasonló, Linux alatt meg elég sokféle módon.
Üdv: Ego
PS: Úgy rémlik, hogy az ANSI már nem is szereti a void-os main-t.
Adjál át egy tetszőleges méretű 2 dimenziós tömböt paraméterként egy fügvénynek (a 2 méret is paraméterként megy, azaz előre egyik sem ismert). Ennek egyik (talán leggyakrababan alkalmazott) megolása is mutatózgatással történik.
Nincs időm hosszú magyarázatra, ezért rövid leszek:
A mutatók használatának egyik oka:
A C-ben a paraméterátadás értékszerinti. Ezért egy fügvény nem tudja megváltoztatni az aktuális paraméter értékét. Erre viszont soxor szükség van. Ekkor rákényszerülsz a mutatók használatára. A te könyvedben is biztos benne van a csere (vagy swap) fügvény példája. Azt nézd meg.
Hmmm... sejtem, hogy még nem írtál olyan programot, amelyben dinamikus memóriafoglalásra volt szükséged. Pointerek nélkül ez nem (sem) menne.
Hogy mondjak egy tipikus példát, írnod kell egy programot, és ennek része egy teljes bináris fájl (pl. kép) memóriába olvasása. Ha változót deklarálsz, pl. így
unsigned char keptarolo[100000];
biztos lehetsz benne, hogy 1000005 bájtos képet fognak vele kezelni. Ha 100005-re veszed, akkor majd a 10006 bájtossal lesz gond. Ilyenkor lehet azt csinálni, hogy
Peldaul van amikor azt kell hasznalni es kesz, lasd pl int main (int argc, char **argv).
Itt argv egy tombre mutat, melynek elemei stringre mutato pointerek.
argv - char **
argv[0] - char *
argv[0][0] - char
"Amit úgy konkréten nehezen tudok fölfogni, azok a pointerek (*) és a címe (&). (ha jól írtam a nevüket meg őket magukat)"
Ebben sokat segíteni nem nagyon lehet, legfeljebb a könyveket ismételgetni: a pointer tkp. ua., mint a változó, csak máshogy néz ki. Mindenesetre amíg ezt a részt nem érted tökletesen, ne menj az egyszerű mintaprogramoknál tovább! C = mutató mutató hátán.
Remelem valaki kisegit:
#ifndef __TOLLBOT_INTERFACE_H__
#define __TOLLBOT_INTERFACE_H__
#endif
Ezt ha valaki nekem kifejtene?
Az a kerdes, hogy a #define es az #endif kozott van-e valami!
1) Ha nincs, akkor egyszeruen csak el akarta kerulni a "symbol redefined" warningot.
2) Ha van, akkor ez egy header-fileban fordulhat elo (TOLLBOT.H), es a tobbszoros beillesztes (#include) okozta tobbszoros definicio ellen vedi meg a #define es az #endif kozotti reszeket
PS: azon ne aggodj, hogy a definialt szimbolumnak nincs erteke, nem kotelezo, hogy legyen.
Egyébként már nagyából értem a C szintaktikáját, nem a C-s gondolkodás móddal van már annyira a gond, hanem azzal, hogy a tényleges lehetőségeimet nem ismerem, amiket nyujt.
Amit úgy konkréten nehezen tudok fölfogni, azok a pointerek (*) és a címe (&). (ha jól írtam a nevüket meg őket magukat)
Nem azzal van a gond, hogy Cygwin-en nincs XFree.
Tudom, hogy van. Azzal van a gond, hogy fölraktam Cygwin-re, de aztán sem az Mplayer (egyébként úgy portolták Cygwin-re a fejlesztői, hogy gyakorlatilag használhatatlan volt) sem egyéb programoknak a configure szkriptje nem ismeri föl. Próbálkoztam megkeresni a ./configure-ban azt a metódust, ahogy felismeri, de nem találtam.
Nem egy X írásába akarok belefogni!!!
(azért hülye nem vagyok... :)
HA jól tudom, ez nem kell, mivel van valami HTML környezet, ami nem szedi ki az ilyen dolgoka. Csak a neve nem jut eszembe. Aki tudja, írja már le, mert elég sokat inkludolgatunk ide is.
Egy nagyon fontos dolgot elfelejtettem: adatszerkezetek.
Tisztába kell jönni mibenlétükkel, és C-beli megvalósításukkal. Enélkül nem lehet programozni. Erröl nem tudok irodalmat, nekem egyetemen tanították (egész jól).
így első programozói feladatok között szerepelhet:
verem, sor, keresőfa, egy- és kétirányba láncolt lista megvalósítása, cirkuláris lista, és ha nagyon tudsz már, akkor mondjuk egy B vagy B+-fa (nekem az utolsó kettőre eddig nem volt türelmem). Ezek azért is jók, mert programozni is tanulsz velük rendesen, meg elég sokat kell mutatózni, ami a C-ben megkerülhetetlen.
És még egy cím, ami 2 dolog miatt sem biztos, hogy jó: www.prog.hu
Egyrészt most valamiért nem érem el, másrészt nem nagyon nézegettem a kezdő szintű C-s dolgokat, de amit láttam, az űgy emlékszem jó volt. És talán adatszerk dolgokat is találsz itt (bár ez se biztos). Na mind1. Nézd meg.
Ennek foleg az elso 2 sorat nem ertem.
Ha ebben valaki kisegitene.
chandinfo=a struktura neve
*FindChan= a struktura definicioja(adattagjai), tehat vegulis egy fuggvenyrol van szo. Miert nincs egy ';' a vegen?
Eddig en _csak_ ilyen "szokvanyos" strukturaat lattam:
struct struktura_azonosito{ tipus1 tag1;
tipus2 tag2;
tipusn tagn;
} ;
struktura_azonosito struktura_valtozo;
(vagy amikor egybe van vonva:
tipusn tagn;
} struktura_valtozo;
)
Szal ami nagyon idegen(magyarazatra szorul):
Hogy lehet meg 1x megadni fuggvenyargumentumkent a structura_azonositot?
Meg miert nincsen ';' a vegen????
(nem, nem a programba sincs pontosvesszo, es hiba nelkul fordul.)
Valahogy valaki valamilyen utan vilagositson fel...;P
Ize most jutott eszembe:(reggel mindig tisztabb az ember feje):
olvastam valahol(talan pont az Xfree site-jan?),
szal sztem van az X szervernek(XFree86), cygwines portja.
De amugy eleg durva lehet csak ugy belefogni egy X irasaba....;))))
(de azert sok szerencset...:)
Ehh Egoist el se hiszed mennyit szenvedtem azzal a biteltolo-s peldaval.
Valahogy Solaris/Sparcon az istennek se akart mukodni.
Aztan, hogy mar ne idegesitsem magam eldontottem magamban, hogy
biztos a Sparc processzor miatt(meg q Big endian, ize miatt nem muxik.
A peldakat nem kell aranyszabalynak venni, es az elmelet miatt kedveltem. ertheto.
Viszont nagyon keves, a fajlkezelesnel nincs egy iagazn komoly program.
Szal kiindulasnak jo, de semmi tobb.
BaliHB: en bot-irasba fogtam bele.
Sztem keres valami egyszeru progit freshmeaten(50-200kbajt) probald megerteni, es irdd meg magad. (valami konzolosat)
De mig nekem nem sikerult, addig ne vedd aranyszabalynak.