[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] GCC question
Peter Slegg wrote:
#define TREE_XYWH(tree) tree.ob_x-3,tree.ob_y-3,tree.ob_width+6,tree.ob_height+6
objc_draw(dlog, start, MAX_DEPTH, TREE_XYWH(dlog));
newsaes.c:651:52: error: macro "objc_draw" requires 7 arguments, but only 4 given
Let's restart to the beginning.
First, what is objc_draw() ?
#define objc_draw(a,b,c,d,e,f,g) mt_objc_draw(a,b,c,d,e,f,g,aes_global)
So with the GemLib (used by GCC), objc_draw() is a macro taking 7 arguments.
If you try to call it with any other number of arguments, it the compilation
will quickly fail at preprocessing stage.
This is what is happening to you, and why you are getting the error.
With Pure C, which use a different GemLib, objc_draw() is probably defined
as a real function. So the expansion of the macro TREE_XYWH() occurs before
the call to the function objc_draw(), and it works.
So what is the solution with GCC and the GemLib ?
Create a new macro with 4 arguments:
#define objc_draw4(a,b,c,d) objc_draw(a,b,c,d)
Then whenever there is a call to objc_draw() with 4 arguments, use
objc_draw4(dlog, start, MAX_DEPTH, TREE_XYWH(dlog));
And this will work.
Finally, this is not a GCC or Pure C issue. This is a GemLib issue. Since
the GemLib functions are implemented as macros, they don't allow to be
called with macro arguments which expands to several arguments like TREE_XYWH().
Anyway, that kind of macro should be considered as evil.