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


Groups > comp.lang.c > #15968

Re: macro

From Ian Collins <ian-news@hotmail.com>
Newsgroups comp.lang.c
Subject Re: macro
Date 2012-01-20 17:06 +1300
Message-ID <9ns7i5F524U6@mid.individual.net> (permalink)
References (9 earlier) <8a04a8ba-eee0-48fd-9cb6-98695875840e@f33g2000yqh.googlegroups.com> <9nnjboFaaoU3@mid.individual.net> <20120118130142.908@kylheku.com> <9ns0koF524U3@mid.individual.net> <jfao4h$8ph$1@dont-email.me>

Show all headers | View raw


On 01/20/12 04:47 PM, James Kuyper wrote:
> On 01/19/2012 09:08 PM, Ian Collins wrote:
>> On 01/19/12 10:09 AM, Kaz Kylheku wrote:
>>> On 2012-01-18, Ian Collins<ian-news@hotmail.com>   wrote:
>>>> Because in most cases it gets used where a function or as in your code,
>>>> a macro wrapping a function, is more appropriate.
> ....
>>> Here is a requirement:
>>>
>>>     or(x, y)
>>>
>>> This must evaluate X.  If X is nonzero, then the value X is the result, and Y
>>> is not evaluated. Otherwise the result is the value of Y.  X is evaluated
>>> exactly once, and Y at most once.
>>>
>>> Good luck making a function for this.  Or even an entirely clean macro,
>>> for that matter.
>>>
>>> (Is that really "poor" man's template, by the way? Okay, show me the "rich"
>>> man's C++ template for it, then.)
>
> There's a trivial problem with the suggestion of using C++ to implement
> or(): 'or' is keyword in C++, with the same meaning as the 'or' #defined
> by<iso646.h>  in C. Any attempt to define any identifier with that name
> would fail, usually by being interpreted as a syntax error. So let's
> change the name of the requested function to Or().
>
>> Not really, at least for c++03.  With C++0x I guess you could use a
>> simple variable arguments template if both expressions are the same type:
>>
>> template<typename Fn, typename... Args>
>> bool do_or( bool b, Fn fn, Args... args)
>> {
>>     if( b ) return b;
>>
>>     return fn( args... );
>> }
>>
>> Life gets more interesting when they are different types.
>
> So, could you show how a non-macro implementation of 'Or()' could built
> in C++ from do_or()? Let's be more specific. Given
>
> 	int a=2;
>
> How could Or(1,a++) implemented, so as to prevent evaluation of a++?

I don't see how it can, a++ will always be evaluated as a function 
parameter in either language.

-- 
Ian Collins

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