[elektro] A szokásos C kezdő agymenés

Palasik Sandor palasik at mail.datanet.hu
Thu Nov 22 16:16:59 CET 2012


> #define DRV_SPI_STATbits(i) SPI##i##STATbits

Ez igazából nem is C, hanem az előfeldolgozó. A dupla # azt jelenti, hogy
ott össze kell ragasztani a szövegeket egybe és azt kapja meg az igazi C
fordító. Tehát mondjuk a DRV_SPI_STATbits(5) hívásból a C fordító már csak
annyit lát, hogy SPI5STATbits.

Ennek megfelelően persze, ha te kapásból azt írod, hogy SPI5STATbits, az
ugyanúgy működik.

Emiatt a primitív működés miatt vigyázni is kell vele, mert ha azt írod,
hogy DRV_SPI_STATbits(1+4),  akkor abból az lesz, hogy SPI1+4STATbits, amire
hibát jelez a C fordító utána.

A szimpla # meg azt jelenti, hogy abból szöveget kell csinálni. Egyik
kedvenc makróm:

#define pvd(x) printf(#x "=%d\n",(x))

Ha hibakeresés közben kell valami változó értéke és valamiért nem akarom
vagy tudom debuggerben nézegetni, akkor ennyit írok:

pvd(ize);

Az eredményben meg mondjuk ez jelenik meg:

ize=42

A fordító meg ezt kapja az előfeldolgozótól:

printf("ize" "=%d\n",(ize));

A két egymás melletti szöveget simán összemásolja egybe, úgyhogy ennek
ugyanaz lesz az eredménye, mint ennek:

printf("ize=%d\n",ize);

Palasik Sándor



More information about the Elektro mailing list