tomld megjegyzések

Áthozom ide inkább ezt a szálat, hogy ne a Raw Therapee cikkjébe kerüljön a nem odatartozó téma.

Hozzászólások

idézet (turul16):

Felatalod a sajat string osztalyod. (reinvent the wheel) Aminek kezelese elter a sokak altal megszokttol es ketseges, hogy tenyleg van anyi haszna.
Masreszt a tipusod egy fontos lehetosege nincs kihasznalva, megpediglen, hogy kepes lenne nem karakternkent masoldni/oszefuzodni egy while ciklusban, eloszor azt hittem, ezert talaltad fel.

Ha uj tipust talalunk fel akkor, valahogy definialni szoktuk. Mondjuk hivjuk str2 -nek. illik a tipus nevevel kezdeni a methodusokat es egy _ -utan irni a nevet.
strcpy2 helyett str2_cpy

str2 lehetne egy struct (long,long,char) , vagy char* ra alias.
lasd meg.: http://en.wikipedia.org/wiki/Offsetof

Eleg magas a null toleranacioad nem biztos, hogy ez jo. see also: assert

Lehet félre értem amit írsz, de pont hogy nem tér el a kezelése a "megszokottól" (tehát működnek a string típusomra a standard függvények), és a másolódás / összefűzést is megoldottam, éppen azzal, hogy nem hoztam létre neki saját struktúrát, hanem egy trükköt találtam ki, miszerint a string karakterek előtt van két long, amely a memóra blokk nagyságát és az azon belüli string hosszát mutatja. De a pointer a string-re mutat. Tehát a string felszabadítása működik csak másképp.

A kezelese azert szokatlan, mert igy szabaditod fel: free((unsigned long*)(ptr) - 2);
Gyakoribb az, hogy inkabb egy makrot biztositasz ami char* -a "konvertalja" az str2 -det, ott ahol char* -kent kell, es sima free -vel szabadithato marad.

Ill az is szokatlan, gyakran varsz ** paramtert.
pl.: unsigned long strlen2(char **s1)
char *res;
..
if (strlen2(&res))

A helyett mondjuk hogy:
str2 res;
..
str2_len(res);

str2 lehetne char* , vagy egy struct -ra mutato tipus.

Attol meg, hogy a blokk/structura merete valtozo az eleje fix, ezert struktura hasznalhato.

see also: struct linux_dirent (getdents(2))

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

igazad van, pont emiatt a típusom miatt várok többször pointerre mutató címet, mintsem magát a pointert adnám át. de ez persze azért van, mert a string pointerem előtti memóriához is hozzá akarok férni. nyilván ha a pointert adnám át, akkor az a stack-en átadódna, és az eredeti pointer előtti memóriát már nem látnám. ez szerintem nem igazán rossz megoldás. a C biztosítja ezt, én élek vele.

makrózni inkább nem makróznék ha nem muszáj.

ha struktúrát használnék egy új típusra, ott akkor persze elég lenne átadnom csak a struktúrára mutató pointert -és nem annak a címét. de ugye ez az előbb leírtjaim miatt van.

ezt az egész megoldásomat nem látom problémának. illetve típus konverziót sem kell így csinálnom.

kieg.: egy dolog talán nem szép, hogy egy adott string-emről nem dönthető el "ránézésre", hogy az standard char tömb, vagy a saját, bővített tömböm. viszont a kód szempontjából nem is fontos, mert ahol ilyet használok, ott úgy is kezelem. itt már tényleg az az eldöntendő szerintem, hogy most mennyire a kód olvashatóságra, vagy éppen a működés milyenségére adjunk. az én megoldásom jól olvasható nekem.

de milyen szempontból? mint írtam, így nem kell konvertálnom a típusom a standard függvényekhez. kód olvashatóság szempontjából sem több a kód, mintha standard string-et használnék.

az strcat2, strcpy2, free2 függvényeimet leszámítva nem rosszabb vagy zavaróbb használni szerintem, és az említett függvények meg pár sor, nem érzem zavarónak.

ettől függetlenül értem és elfogadom, hogy tisztább lehet rendes típusokkal megoldani, mint pointer-ekkel trükközni szerintetek. de a megoldás szempontjából, meg akár sebesség szempontjából is így gondoljátok?

még egy dolog; az egész tomld csak tömény string manipuláció. ez figyelembe vettem és fontosnak tartottam, mikor megterveztem. igaz hogy általában véve nem optimalizálók kódon belül - pl. a while ciklusaimnak sajátos formáját használom, de ez meg azért van, hogy a kód olvashatóságát, megérthetőségét növeljem számomra, mivel nem bevétel forrás.

az, hogy a string-em sima pointer-ét bármikor át tudom adni standard függvényeknek, mindenképpen számít. igaz, a sebesség már nagyobb kérdés, valószínű ezzel kapcsolatban ezer dolgot találhatnánk a kódomban, amely fejleszthető jelenleg is.

Gyakran csinalsz olyat, hogy null checket hajtasz vegre olyan helyeken ahol NULL felbukanasa programozasi hibat jelenthet.
A reakciod erre egy sima hamis ertekkel valo vissza teresa fugvenyben. Valami hangosabb kene. Vagy pont ellenkezoleg, csak debug modban ellenorizni.
Csenedben kezeles/rejtegetes rendszerint nem a jo modszer.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.