[elektro] C kérdés

Papp Zoltán zombi at c2.hu
Thu Jan 31 22:25:20 CET 2008


2008.01.31. 16:33:53 dátumon Moczik Gabor <pm_levlista at progzmaster.hu>  
írta:

> Hofferek Attila wrote:
>> #define mUSBGetHIDDscAdr(ptr) { if(usb_active_cfg == 1) ptr = (rom
>> byte*)&cfg01.hid_i00a00; }
>>
>> (az egész egy sorban) ...bár nem fogom fel miért nem fordul több sorra
>> bontva.
>
> Azert, mert a makro-kat a sorvege jel hatarolja, nem lehet tobbsoros
> makrot irni.

Így van, a \ jel meg megmondja a fordítónak, hogy a köv. sorban  
folytatódik a makró.
Normál programsornál ugye a ; (vagy egyéb tesója) a határolójel
Rakhatod egy 200 karakteres sorba is, csak úgy átláthatatlan.

Ajánlom mindenki figyelmébe "Andrew Koenig: C csapdák és buktatók" c.  
könyvét, érdekes és tanulságos olvasmány.
http://www.kiskapu.hu/index.php?BODY=BookInfo&OP=details&ID=60294

Annyi, mint drágább helyen egy pizza, most kicsit kevesebb, mint 2000Ft  
(netről rendelve), szerintem ennyit bőven megér.

Ilyen "állatok" is vannak benne pl.:

(*(void(*)())0)();

Ez gyakorlatilag egy JMP 0 utasítás, azaz a legtöbb uC-n egy RESET :-)  
Lehet elemezni. A könyvben benne van a megoldás.

Aztán van benne olyasmi is, hogy miért jobb az "if(a==7)" utasítás helyett  
pl. "if(7==a)" alakot használni.

A kedvencem: ha van egy x[] tömbünk, akkor tulajdonképpen az 'x'-t a  
fordító mutatóként kezeli, így az:
i=x[3] megegyzik az i=*(x+3) kifejezéssel, ami megegyezik az i=*(3+x)  
kifejezéssel, ami így is írható: i=3[x]
És tényleg működik :-)

Meg pl.: gépfüggetlen dec -> hex átalakítás:  
hex="0123456789ABCDEF"[dec%16] (bámilyen kódtáblával működik).

Sok dolog egyértelmű benne, sok nem az, de ad egy pici szemléletet az  
embernek, amivel tényleg programozni lehet tanulni és nem a nyelv alapjait.

Üdv

-- 
Papp Zoltán
OneWay Electronics - www.onewayelectronics.hu
Hangszerviz - www.hangszerviz.hu



More information about the Elektro mailing list