[fpc-devel] Macro Processing
Joerg Schuelke
joerg.schuelke at gmx.de
Mon May 16 02:30:29 CEST 2011
Am Sun, 15 May 2011 13:26:03 +0200 (CEST)
schrieb Daniël Mantione <daniel.mantione at 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
More information about the fpc-devel
mailing list