Re: [AD] trying to make allegro compatible with MFC

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


In reply to Eric Botcazou <ebotcazou@xxxxxxxxxx>:
>It looks like the two preprocessors don't behave the same.
>Is there any specialist of preprocessors here ?

Whilst I can't speak for the MS compiler, I can speak for the C
preprocessor used in gcc:

1/. The code fragment:

        #define WINDOWS_RGB RGB
        #undef RGB

        WINDOWS_RGB(a, b, c)

    will expand to `RGB(a, b, c)' (ref. 1), regardless of what RGB was
    defined to be originally. So a #define line behaves as if no macros
    were defined.

2/. The code fragment:

        #define RGB(a, b, c) /* some function of (a, b, c) */
        #define RGB struct allegro_rgb

    would define two different things, and is perfectly legal. The first
    definition would be used if `RGB(' was encountered, and the second
    would be used if `RGB?', where `?' is anything but `('. (ref. 2)

If the second behaviour holds true on non-gcc C preprocessors, then I
believe we have solved the problem; we just rename the RGB structure to
allegro_rgb, and provide a #definition of it.

Otherwise, we could test for gcc (#ifdef __GNUC__) and act accordingly.

References:
 1. cpp.info, `Cascaded Macros' (`info cpp m m c')
 2. cpp.info, `Argument Macros' (`info cpp m a'), line 150ish

Bye for now,
-- 
Laurence Withers, lwithers@xxxxxxxxxx
                http://www.lwithers.demon.co.uk/

Attachment: signature.asc
Description: PGP signature



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/