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


Groups > comp.lang.c > #101324

Re: Macro Expansion

From BartC <bc@freeuk.com>
Newsgroups comp.lang.c
Subject Re: Macro Expansion
Date 2017-01-09 01:11 +0000
Organization A noiseless patient Spider
Message-ID <o4unsf$p2j$1@dont-email.me> (permalink)
References <o4rcbl$4cp$1@dont-email.me> <o4ufvd$geq$1@z-news.wcss.wroc.pl> <o4ujb6$d72$1@dont-email.me>

Show all headers | View raw


On 08/01/2017 23:53, BartC wrote:
> On 08/01/2017 22:54, antispam@math.uni.wroc.pl wrote:
>> BartC <bc@freeuk.com> wrote:
>
>>> * The result is now scanned again looking for new macros to expand.
>>>   However, once any name (eg. M and W) has been expanded once, it is
>>>   never expanded again (in a subsequent pass). So only XX is changed
>>>   to result in:
>>>
>>>    10 20 "10" 99 M(a,b) W+W+20+x
>>
>> AFAICS this is your interetation, which is mostly correct but
>> in corner cases may produce wrong result and seem to be much
>> less efficient then what standard says:
>>
>> : After all parameters in the replacement list have been substituted
>> : and # and ## processing has taken place, all placemarker preprocessing
>> : tokens are removed. The resulting preprocessing token sequence is
>> : then rescanned, along with all subsequent preprocessing tokens of
>> : the source file, for more macro names to replace.
>>
>> So, after macro expanded parameters are substituted and # and ##
>> handling is done you simply prepend the result to source text
>> following macro call and start reading from the start of resulting
>> token list.  In other words there are _no_ repeated rescanning,
>> rescanning is done just once and during rescanning you may have
>> macro call which begins withing replacement list but ends in the
>> source text.

Yes, this is an good example of that:

#define A(x,y) if(x==y)
#define B A(

int main(void){
   B 10,20);
}

The expanded code should be 'if(10==20)'. But out of six compilers I 
tried, 3 had problems. (One crashed, one ran out of memory, another - 
MSVC 2008 - reported an error about A not having enough arguments.

However this variation:

#define A(x,y) if(x==y)
#define B A

int main(void){
   B (10,20);
}

was generally OK. The new macro call is still split like this:

   A / (10,20)         # A in replacement sequence, rest in main source

but that seems to be less objectionable.

Also, K&R2, page 230, says this:

"In both kinds of macro, the replacement token sequence is repeatedly 
rescanned for more defined identifiers." (Then going on about only 
replacing each identifier once.)

I think I might go with my current scheme for now (which has a tweak to 
fix the second case above where the replacement text ends with a new 
macro name, and the "(...)" follows in the main text). Because I've 
already solved the problems with controlling macro replacement, which 
will be harder when it's mixed with the main text.

(I need to get on with the rest of my compiler and can live with a not 
quite perfect preprocessor until I can return to it later on when 
everything else is finished, and try a different approach. I think if it 
was OK for Microsoft - in 2008 anyway - it'll do for me!)


-- 
Bartc

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


Thread

Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 18:35 +0000
  Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-01-07 11:23 -0800
    Re: Macro Expansion Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-01-07 21:28 +0000
  Re: Macro Expansion Siri Cruise <chine.bleu@yahoo.com> - 2017-01-07 11:45 -0800
    Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 20:16 +0000
      Re: Macro Expansion Siri Cruise <chine.bleu@yahoo.com> - 2017-01-07 12:23 -0800
        Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 20:31 +0000
          Re: Macro Expansion Siri Cruise <chine.bleu@yahoo.com> - 2017-01-07 12:42 -0800
          Re: Macro Expansion Ian Collins <ian-news@hotmail.com> - 2017-01-08 14:42 +1300
            Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 13:18 +0000
  Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 20:15 +0000
    Re: Macro Expansion Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-01-07 20:42 +0000
      Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 22:50 +0000
        Re: Macro Expansion Ian Collins <ian-news@hotmail.com> - 2017-01-08 11:59 +1300
          Re: Macro Expansion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2017-01-07 15:10 -0800
        Re: Macro Expansion supercat@casperkitty.com - 2017-01-07 17:24 -0800
          Re: Macro Expansion Tim Rentsch <txr@alumni.caltech.edu> - 2017-01-15 21:55 -0800
            Re: Macro Expansion supercat@casperkitty.com - 2017-01-16 09:06 -0800
              Re: Macro Expansion Tim Rentsch <txr@alumni.caltech.edu> - 2017-01-31 08:51 -0800
                Re: Macro Expansion supercat@casperkitty.com - 2017-01-31 13:06 -0800
                Re: Macro Expansion Tim Rentsch <txr@alumni.caltech.edu> - 2017-02-03 07:49 -0800
                Re: Macro Expansion supercat@casperkitty.com - 2017-02-03 12:03 -0800
                Re: Macro Expansion Tim Rentsch <txr@alumni.caltech.edu> - 2017-02-09 09:00 -0800
        Re: Macro Expansion Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-01-08 01:37 +0000
          Re: Macro Expansion Jean-Marc Bourguet <jm@bourguet.org> - 2017-01-08 10:22 +0100
  Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-01-07 12:18 -0800
    Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 20:28 +0000
      Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-01-07 12:36 -0800
        Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-07 22:59 +0000
  Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-01-08 00:20 -0800
    Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 13:30 +0000
      Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-10 14:00 +0000
        Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-01-10 07:43 -0800
          Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-10 17:47 +0000
            Re: Macro Expansion Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-01-10 22:49 +0000
              Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-10 23:28 +0000
              Re: Macro Expansion "James R. Kuyper" <jameskuyper@verizon.net> - 2017-01-10 18:51 -0500
                Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-11 00:06 +0000
          Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-10 20:30 +0000
            Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-04-26 10:04 -0700
              Re: Macro Expansion Keith Thompson <kst-u@mib.org> - 2017-04-26 12:00 -0700
                Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-04-26 12:24 -0700
              Re: Macro Expansion bartc <bc@freeuk.com> - 2017-04-26 20:12 +0100
                Re: Macro Expansion Thiago Adams <thiago.adams@gmail.com> - 2017-04-26 12:34 -0700
                Re: Macro Expansion jameskuyper@verizon.net - 2017-04-26 13:46 -0700
  Re: Macro Expansion Jean-Marc Bourguet <jm@bourguet.org> - 2017-01-08 10:13 +0100
    Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 13:10 +0000
      Re: Macro Expansion Jean-Marc Bourguet <jm@bourguet.org> - 2017-01-08 15:51 +0100
        Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 17:17 +0000
          Re: Macro Expansion supercat@casperkitty.com - 2017-01-08 11:04 -0800
            Re: Macro Expansion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2017-01-08 11:10 -0800
              Re: Macro Expansion supercat@casperkitty.com - 2017-01-08 14:08 -0800
            Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 19:49 +0000
              Re: Macro Expansion supercat@casperkitty.com - 2017-01-08 14:17 -0800
          Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 19:19 +0000
          Re: Macro Expansion Jean-Marc Bourguet <jm@bourguet.org> - 2017-01-08 21:43 +0100
      Re: Macro Expansion supercat@casperkitty.com - 2017-01-08 10:43 -0800
      Re: Macro Expansion Keith Thompson <kst-u@mib.org> - 2017-01-08 12:39 -0800
  Re: Macro Expansion antispam@math.uni.wroc.pl - 2017-01-08 22:54 +0000
    Re: Macro Expansion "James R. Kuyper" <jameskuyper@verizon.net> - 2017-01-08 18:36 -0500
      Re: Macro Expansion antispam@math.uni.wroc.pl - 2017-01-09 01:15 +0000
        Re: Macro Expansion "James R. Kuyper" <jameskuyper@verizon.net> - 2017-01-08 20:49 -0500
    Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-08 23:53 +0000
      Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-09 01:11 +0000
      Re: Macro Expansion antispam@math.uni.wroc.pl - 2017-01-09 01:31 +0000
        Re: Macro Expansion BartC <bc@freeuk.com> - 2017-01-10 11:28 +0000

csiph-web