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