Verständnisfrage #define Macro

03/02/2008 - 21:52 von Michael Stum | Report spam
Hallo,

ich versuche gerade, etwas C Code zu verstehen, um genau zu sein geht es
sich um etwas Pointerarbeit und zwei #define Makros. Leider habe ich
nicht viel Erfahrung mit C und noch weniger von PràProzessor Makros,
weswegen mich das ganze gerade sehr verwirrt.

Der Code um den es geht:

#define SSDST(bits, num) (scale2x_uint##bits *)dst##num
#define SSSRC(bits, num) (const scale2x_uint##bits *)src##num

/**
* Apply the Scale2x effect on a group of rows. Used internally.
*/
static inline void stage_scale2x(void* dst0, void* dst1, const void*
src0, const void* src1, const void* src2, unsigned pixel, unsigned
pixel_per_row)
{
switch (pixel) { /* Gekürzt */
case 1 : scale2x_8_def(SSDST(8,0), SSDST(8,1), SSSRC(8,0), SSSRC(8,1),
SSSRC(8,2), pixel_per_row); break;
}
}

Es geht sich um Manipulation eines Bitmaps, und das ganze liest
irgendwie Zeilen eines Bitmaps. Was mich wundert: Die Funktion
stage_scale2x nimmt 5 Pointer als argument an (dst0/1 und src0-2),
verwendet die aber scheinbar gar nicht (oder verstehe ich void* gerade
nicht richtig?)

Googlen scheitert leider an der tatsache, das ## einfach ignoriert wird
und ich einfach nicht kapiere, was die beiden Makros genau machen.

Hat jemand einen Tipp oder Anhaltspunkt wo ich suchen könnte?
Danke!
 

Lesen sie die antworten

#1 ram
03/02/2008 - 21:59 | Warnen spam
Michael Stum writes:
#define SSDST(bits, num) (scale2x_uint##bits *)dst##num
stage_scale2x nimmt 5 Pointer als argument an (dst0/1 und src0-2),
verwendet die aber scheinbar gar nicht (oder verstehe ich void* gerade
nicht richtig?)



Die Makros erzeugen die Namen dieser Parameter mit »##«.
So wird aus »SSDST(8,0)« beispielsweise »(scale2x_uint8 *)dst0«.

Ähnliche fragen