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


Groups > comp.lang.c > #15971

Re: macro

From Ian Collins <ian-news@hotmail.com>
Newsgroups comp.lang.c
Subject Re: macro
Date 2012-01-20 18:28 +1300
Message-ID <9nscbeF524U7@mid.individual.net> (permalink)
References (11 earlier) <20120118130142.908@kylheku.com> <9ns0koF524U3@mid.individual.net> <jfao4h$8ph$1@dont-email.me> <9ns7i5F524U6@mid.individual.net> <jfat42$t2p$1@dont-email.me>

Show all headers | View raw


On 01/20/12 06:12 PM, James Kuyper wrote:
> On 01/19/2012 11:06 PM, Ian Collins wrote:
>> 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:
> ....
>>>>> 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:
> ....
>>>> 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.
>
> That was precisely the point Kaz was making. He's suggesting that it can
> be implemented using a macro, though I'm not quite sure how that would work.
>
> The key point is that controlling the number of times that an argument
> gets evaluated is possible for macros, but not for functions.

I'd like to see a macro solution for this problem, I don't see how it 
could work considering the value of the first argument isn't known at 
compile time.

I would also like to see a macro solution where the two arguments are 
function calls.

The addition of automatic return type deduction and variable argument 
templates increases the utility of templates in areas where macros were 
the only option.

> What this has to do with the do {...} while(0) idiom, I have no idea,
> since no matter how Or() is implemented, it certainly can't be
> implemented by use of that idiom, since it doesn't allow returning a value.

:)

-- 
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