Am Sun, 15 May 2011 13:26:03 +0200 (CEST)
schrieb Daniël Mantione <daniel.manti...@freepascal.org>:

> Feel free to come up with examples and convince us. They need to be 
> examples of code that is much more awkward to write without macro's.

We extend the small enumeration example:

Think of it, as a server program with a lot of callback procedures and
associated data

  procedure cb_proc1();begin ... end;
  procedure cb_proc2();begin ... end;
  procedure cb_proc3();begin ... end;
  procedure cb_proc4();begin ... end;
  procedure cb_proc5();begin ... end;
  procedure cb_proc6();begin ... end;

type
  callenum=(
    proc1,
    proc2,
    proc3,
    proc4,
    proc5,
    proc6
  );

  callproc=procedure();
  inforec=record
    id:callenum;name:string[12];address:callproc
  end;

const
  infoarr:array[callenum] of inforec={
    {id:proc1;name:'proc1';address:@cb_proc1},
    {id:proc2;name:'proc2';address:@cb_proc2},
    {id:proc3;name:'proc3';address:@cb_proc3},
    {id:proc4;name:'proc4';address:@cb_proc4},
    {id:proc5;name:'proc5';address:@cb_proc5},
    {id:proc6;name:'proc6';address:@cb_proc6}
  }

What I possibly would do is:

{$Makro entry(n):={id:proc %% %n%;          // concat with parameter
                   name:'proc' %% % %n%;    // concat with str par
                   address:@cb_proc %% %n%  // concat with parameter
                  }
}

used with the explicit syntax:

  infoarr:array[1..6] of inforec={
    {$Expand entry(1)},
    {$Expand entry(2)},
    {$Expand entry(3)},
    {$Expand entry(4)},
    {$Expand entry(5)},
    {$Expand entry(6)},
  }

thats nice enough if you have 57 elements in your callenum. Would you
say then, use an IDE instead of? Every time I change the inforec, which
is possibly not that seldom, I only change the macro once. Is this not
nice? Macros simply can help to keep the things together.

Again:
 The point is not, to find an example, which is not doable without
 macros.

 The point is, to show that the concept of automated text changing is
 useful.

Regards
        Jörg
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to