Re: [AD] Darwin/MacOS X port

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


Eric Botcazou wrote:
> Do we hit a fondamental limitation of the C preprocessor, or is there
> a trick to work around the problem ?

The following kind of works, but it's even ugly to be a preprocessor
hack and I'm not sure it will work in all possible kinds of situations:

   #define main                                               \
      int al_mangled_main(int argc, char *argv[]);            \
      main(int argc, char *argv[])                            \
      {                                                       \
         return _main((void *)_mangled_main, argc, argv);     \
      }                                                       \
      int _mangled_main

   #define END_OF_MAIN()

IIRC someone on [AL] suggested to get rid of END_OF_MAIN() in 5.0 and
instead you would have to do 

   AL_MAIN(int argc, char *argv[])
   {
      int i;
      allegro_init();
      etc.
   }

where in this case I suppose we would have

   #define AL_MAIN(arg1, arg2)                                \
      int al_mangled_main(arg1, arg2);                        \
      int main(int argc, char *argv[])                        \
      {                                                       \
         return _main(_mangled_main, argc, argv);             \
      }                                                       \
      int al_mangled_main(arg1, arg2)

This has the advantage of being more explicit: we don't have to worry
about the symbol main being defined to something else (in case someone
does struct{int main;}x; (in case that's more than an academic
problem)). I don't know all details about END_OF_MAIN() so maybe it
doesn't work everywhere...

-- 
Sven Sandberg    svsa1977@xxxxxxxxxx    home.student.uu.se/svsa1977



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