Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #15817

Re: macro

From "Joachim Schmitz" <nospam.jojo@schmitz-digital.de>
Newsgroups comp.lang.c
Subject Re: macro
Date 2012-01-15 15:34 +0100
Organization 1&1 Internet AG
Message-ID <jeuo5f$93f$1@online.de> (permalink)
References <89018f82-9f45-4e72-a0a2-8424e91752b6@g41g2000yqa.googlegroups.com> <87boq5ozau.fsf@temporary-address.org.uk> <8645ca39-0a48-4efb-af29-86f84eb04cd5@h3g2000yqe.googlegroups.com>

Show all headers | View raw


dspfun wrote:
> On 15 Jan, 14:44, Dr Nick <3-nos...@temporary-address.org.uk> wrote:
>> dspfun <dsp...@hotmail.com> writes:
>>> Hi all!
>> 
>>> Can you see anything wrong or "bad" with the following macro?
>> 
>>> #define LOG(level, msg) \
>>> openlog (__FUNCTION__, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER);
>>> \
>>> syslog (level, "%s", msg);\
>>> closelog ();
>> 
>>> I have problems using the macro with ternary operators. I believe it
>>> should have parantheses around it all, but I cannot get it right.
>> 
>> Do you mean using it inside operators - like:
>> 
>> b==c ? LOG(10,"hello") : LOG(2,"goodbye");
>> 
>> If so, then you will have problems as the macro is three statements
>> while the ternary operator expects a single expression on each side.
>> 
>> If you do mean that - why are you doing it? The macro returns no
>> value so you'd be better with an if. If you don't mean that, what do
>> you mean (hint - give an example of where it's not working).
>> 
>> If you do want to use it with an if you need to be careful to wrap
>> it in {}s. You might want to use the do{ ... } while(0) trick.
>> --
>> Online waterways route planner |http://canalplan.eu
>> Plan trips, see photos, check facilities |http://canalplan.org.uk
> 
> Hi, thanks for your quick reply!
> 
> Here is the function/code where it is used (slightly modified, but
> still is valid):
> 
> static void
> foo(Boolean internal)
> internal ? TRACE_IF(8, STR("Doing internal stuff\n")) : TRACE_IF(8,
> STR("Not internal stuff\n"));
> ..snip...
> 
> 
> TRACE_IF is defined as:
> 
> #define TRACE_IF(GROUP,MSG) LOG(LOG_INFO, MSG)
> 
> 
> LOG is defined as:
> #define LOG(level,msg) openlog (__FUNCTION__, LOG_CONS | LOG_PID |
> LOG_NDELAY, LOG_USER); syslog (level, "%s", msg);closelog ();
> 
> 
> Resulting in:
> 
> internal ? openlog (__FUNCTION__, 0x02 | 0x01 | 0x08, (1<<3)); syslog
> (6, "%s", STR("Doing internal stuff\n"));closelog (); : openlog
> (__FUNCTION__, 0x02 | 0x01 | 0x08, (1<<3)); syslog (6, "%s", STR("Not
> internal stuff\n"));closelog ();;
> 
> 
> Which gives the compile error:
> foo.c:737: error: expected ':' before ';' token
> 
> What would be the "proper" way to define the macro LOG above?

Try this:

#define LOG(level,msg) do {\
 openlog (__FUNCTION__, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER);\
 syslog (level, "%s", msg);\
 closelog (); } while (0)

Bye, Jojo

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

macro dspfun <dspfun@hotmail.com> - 2012-01-15 05:29 -0800
  Re: macro Dr Nick <3-nospam@temporary-address.org.uk> - 2012-01-15 13:44 +0000
    Re: macro dspfun <dspfun@hotmail.com> - 2012-01-15 05:58 -0800
      Re: macro "Joachim Schmitz" <nospam.jojo@schmitz-digital.de> - 2012-01-15 15:34 +0100
      Re: macro "christian.bau" <christian.bau@cbau.wanadoo.co.uk> - 2012-01-15 06:37 -0800
        Re: macro dspfun <dspfun@hotmail.com> - 2012-01-15 07:28 -0800
          Re: macro Philip Lantz <prl@canterey.us> - 2012-01-15 17:30 -0800
            Re: macro Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-01-16 00:18 -0800
              Re: macro Hans Vlems <hvlems@freenet.de> - 2012-01-16 00:52 -0800
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-16 22:08 +1300
                Re: macro Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-01-16 03:04 -0800
                Re: macro Markus Wichmann <nullplan@gmx.net> - 2012-01-16 12:42 +0100
        Re: macro jgk@panix.com (Joe keane) - 2012-01-16 14:48 +0000
          Re: macro Keith Thompson <kst-u@mib.org> - 2012-01-16 12:01 -0800
            Re: macro Philip Lantz <prl@canterey.us> - 2012-01-17 01:02 -0800
              Re: macro Keith Thompson <kst-u@mib.org> - 2012-01-17 13:05 -0800
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-18 13:12 +1300
                Re: macro dspfun <dspfun@hotmail.com> - 2012-01-18 01:05 -0800
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-18 22:57 +1300
                Re: macro "osmium" <r124c4u102@comcast.net> - 2012-01-18 06:22 -0600
                Re: macro dspfun <dspfun@hotmail.com> - 2012-01-18 07:50 -0800
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-20 14:09 +1300
                Re: macro blp@cs.stanford.edu (Ben Pfaff) - 2012-01-18 11:28 -0800
                Re: macro Kaz Kylheku <kaz@kylheku.com> - 2012-01-18 21:09 +0000
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-20 15:08 +1300
                [OT] Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-20 15:58 +1300
                Re: [OT] Re: macro Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-01-20 12:22 +0000
                Re: [OT] Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-21 07:58 +1300
                Re: macro James Kuyper <jameskuyper@verizon.net> - 2012-01-19 22:47 -0500
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-20 17:06 +1300
                Re: macro James Kuyper <jameskuyper@verizon.net> - 2012-01-20 00:12 -0500
                Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-20 18:28 +1300
                Re: macro Keith Thompson <kst-u@mib.org> - 2012-01-20 03:21 -0800
                Re: macro Shao Miller <sha0.miller@gmail.com> - 2012-01-20 10:50 -0500
                Re: macro Shao Miller <sha0.miller@gmail.com> - 2012-01-20 11:46 -0500
                Re: macro Keith Thompson <kst-u@mib.org> - 2012-01-18 14:24 -0800
                Re: macro jgk@panix.com (Joe keane) - 2012-01-18 22:36 +0000
                Re: macro Kaz Kylheku <kaz@kylheku.com> - 2012-01-18 22:50 +0000
            Re: macro jgk@panix.com (Joe keane) - 2012-01-17 22:08 +0000
  Re: macro Keith Thompson <kst-u@mib.org> - 2012-01-15 08:00 -0800
  Re: macro NEON China BLUE <chine.bleu@yahoo.com> - 2012-01-15 08:15 -0800
  Re: macro Ian Collins <ian-news@hotmail.com> - 2012-01-16 09:04 +1300
    Re: macro Philip Lantz <prl@canterey.us> - 2012-01-15 17:36 -0800
  Re: macro Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-16 12:01 +0000

csiph-web