Aaron Ardiri wrote:
>
> this is what i would recommend as well :)
>
> #define myMemMove(a,b,c,d) \
> MemPtrDataStorage((a)) ? DmWrite((a),(b),(c),(d)) \
> : MemMove((a)+(b),(c),(d))
>
> kill the { } and ; *g* not needed, and, always () around your
> arguments, for safety :) you here it doesn't matter with a+b,
> but, with a*b, it would:
You neglected to enclose the ?: expression in parentheses. For example,
consider:
#define FOO(a, b, c) \
(a) ? (b) : (c)
int x;
x = 4 * FOO(1, 2, 3);
The value of x is now 2, not 8 as one would expect.
Alan Ingleby wrote:
>
> #define SafeUlgyDmWrite(a,b,c,d)
> {MemPtrDataStorage(a)?DmWrite(a,b,c,d):MemMove(a+b,c,d);}
As Aaron already pointed out, the braces are totally unnecessary. Furthermore,
the following would generate a syntax error:
if (condition)
SafeUglyDmWrite(a, b, c, d);
else
/* ... */
If you do need to use braces in macros, you need to enclose them in a do-while
block:
#define BAR(x, y) \
do \
{ \
/* ... */ \
} while (0) /* semicolon intentionally omitted */
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/