Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Odd Macro Problem

Reply
Thread Tools

Odd Macro Problem

 
 
kid joe
Guest
Posts: n/a
 
      01-29-2011
Hello all

Long time no posting! I've mostly been using Java these couple years, but
now I'm working on a C project again. The group seems a lot quieter than
it used to be and lots of familiar names no longer appear in the recent
post lists - quite a change!

Anyway, I have a macro that can be used like:

E(errno);

but for reasons of brevity I frequently use the form:

E(errno = EINVAL);

But I would like to be able to have two definitions such that it evaluates
to an active form like:

printf("%d\n", errno);
OR
printf("%d\n", errno = EINVAL);

and an inactive form that does nothing. The problem is, if I define the
macro as simply:

#ifdef INACTIVATE
#define E(val)
#else
#define E(val) printf("%d\n", (val))
#endif

then the inactive form will not emit the 'errno = EINVAL' expression
and set the value. If I define the inactive macro as:

#define E(val) (val)

that can emit a useless expression like:

errno;

Is there a way to write this macro to solve this problem and still
satisfy all of the other requirements?

--


( )
( )
G O O D ( ) M O R N I N G ! !
( )
) )
( ( /\
(_) / \ /\
________[_]________ /\/ \/ \
/\ /\ ______ \ / /\/\ /\/\
/ \ //_\ \ /\ \ /\/\/ \/ \
/\ / /\/\ //___\ \__/ \ \/
/ \ /\/ \//_____\ \ |[]| \
/\/\/\/ //_______\ \|__| \
/ \ /XXXXXXXXXX\ \
\ /_I_II I__I_\__________________\
I_I| I__I_____[]_|_[]_____I
I_II I__I_____[]_|_[]_____I
I II__I I XXXXXXX I
~~~~~" "~~~~~~~~~~~~~~~~~~~~~~~~

 
Reply With Quote
 
 
 
 
Eric Sosman
Guest
Posts: n/a
 
      01-29-2011
On 1/29/2011 4:17 PM, kid joe wrote:
>
> Anyway, I have a macro that can be used like:
>
> E(errno);
>
> but for reasons of brevity I frequently use the form:
>
> E(errno = EINVAL);
>
> But I would like to be able to have two definitions such that it evaluates
> to an active form like:
>
> printf("%d\n", errno);
> OR
> printf("%d\n", errno = EINVAL);
>
> and an inactive form that does nothing. The problem is, if I define the
> macro as simply:
>
> #ifdef INACTIVATE
> #define E(val)
> #else
> #define E(val) printf("%d\n", (val))
> #endif
>
> then the inactive form will not emit the 'errno = EINVAL' expression
> and set the value. If I define the inactive macro as:
>
> #define E(val) (val)
>
> that can emit a useless expression like:
>
> errno;
>
> Is there a way to write this macro to solve this problem and still
> satisfy all of the other requirements?


Live with the useless expression: it does no harm, aside
from (perhaps) eliciting a warning message from the compiler.

A better approach, I think, is to step back and ask yourself
why you want one macro to do two rather different things: be both
a debugging aid (I guess) and an integral part of the program logic.
You may get it to work, but the "do one thing well" principle seems
to suggest you shouldn't try unless there's a compelling reason.

"It's a floor wax *and* a dessert topping!" -- SNL

"Simplify, simplify!" -- HDT

--
Eric Sosman
http://www.velocityreviews.com/forums/(E-Mail Removed)lid
 
Reply With Quote
 
 
 
 
Shao Miller
Guest
Posts: n/a
 
      05-08-2011
kid joe wrote:
>
> #ifdef INACTIVATE
> #define E(val)
> #else
> #define E(val) printf("%d\n", (val))
> #endif
>


What about:

#ifdef INACTIVE
# define E(val) ((void)(val))
#else
# define E(val) (printf("%d\n", (val)))
#endif

?
 
Reply With Quote
 
Harald van Dijk
Guest
Posts: n/a
 
      05-09-2011
On May 8, 7:01*am, Shao Miller wrote:
> kid joe wrote:
>
> > * #ifdef INACTIVATE
> > * #define E(val)
> > * #else
> > * #define E(val) printf("%d\n", (val))
> > * #endif

>
> What about:
>
> * *#ifdef INACTIVE
> * *# *define E(val) ((void)(val))
> * *#else
> * *# *define E(val) (printf("%d\n", (val)))
> * *#endif
>
> ?


Your solution, while valid, was posted more than three months after
the previous post in the thread, which already suggested the same
thing.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Odd behavior with odd code Michael Speer C Programming 33 02-18-2007 07:31 AM
Macro for counting the bits in odd positions zets C Programming 7 08-11-2005 04:00 AM
Odd Macro Problem Michael B Allen C Programming 1 02-27-2005 01:57 PM
#define macro to enclose an older macro with strings Dead RAM C++ 20 07-14-2004 10:58 AM
macro name from macro? D Senthil Kumar C Programming 1 09-21-2003 07:02 PM



Advertisments